Estoy intentado rellenar un formulario web automaticamente desde builder 6,
concretamente un formulario de hacienda , el 036, cogiendo los datos de una base de datos y no encuentro la manera.
la pagina es la siguiente
https://www2.agenciatributaria.gob.e.../ie03700t.html , el formulario esta dentro de un frame , estoy probando cosas pero me da un acces violation
Esto es un codigo que encontre en otra página y que he intentado modificar para capturar el frame ,parece que captura el frame pero luego ya va todo mal , tampoco entiendo mucho el codigo, y no hay manera, como vereis he probado varias cosas a ver si habia suerte pero no.
gracias anticipadas
Código:
typedef std::map<CComVariant, CComBSTR> MapField;
MapField mf;
mf["A010101"] = L"43000000K";
mf["A010102"] = L"nombre y apellidos";
CComQIPtr<IHTMLDocument2> doc(web->Document);
CComPtr<IHTMLElementCollection> forms;
CComPtr<IHTMLFramesCollection2> frames;
doc->get_frames(&frames);
CComPtr<IDispatch> disp;
VARIANT n, vFrame;
n.vt = VT_I4;
n.intVal = 1;
HRESULT hr = frames->item(&n,&vFrame);// (Variant("pagi"), Variant());
if (SUCCEEDED(hr))
{
ShowMessage("hola, hay frame"); // hasta aqui parece que funciona
CComQIPtr<IHTMLFrameElement> frame(disp);
CComQIPtr<IHTMLFormElement> form(disp);
form = frame;
CComQIPtr<IHTMLInputElement> field;
for (MapField::iterator ite = mf.begin(); ite != mf.end(); ite++)
{
disp = 0;
// a partir de aqui ni idea(todo mal)
if (SUCCEEDED(form->item(ite->first, CComVariant(), &disp)) && disp)
{
field = disp;
field->put_value(ite->second);
}
}
//form->submit();
}