我试图从c ++程序填充Internet Explorer中的某些表单输入字段但我面临一个随机错误,我希望是因为我的代码:
UINT msg = RegisterWindowMessage("WM_HTML_GETOBJECT");
LRESULT result = 0;
SendMessageTimeout(hwnd, msg, NULL, NULL, SMTO_ABORTIFHUNG, 10000, (PDWORD_PTR)&result);
if (!result)
return;
// get main document object
IHTMLDocument3 *doc = NULL;
ObjectFromLresult(result, IID_IHTMLDocument3, NULL, (void**)&doc);
if (!doc)
return;
VARIANT varint, varstr;
varint.vt = VT_I4;
varstr.vt = VT_BSTR;
IHTMLElementCollection* pElemCollections=NULL;
if (FAILED(doc->getElementsByTagName(L"input", &pElemCollections)))
return;
long nelm;
pElemCollections->get_length(&nelm);
...
在最后一行并且在同一页面上使用相同的HWND,我有时会得到好的数字或输入字段,并且经常为nelm得到0。
您是否在我的代码中看到了错误或者是错误?
请注意,我确认HWND是正确的,并且永远不会调用return
。
由于
答案 0 :(得分:0)
通过这样做我没有更多问题:
UINT msg = RegisterWindowMessage("WM_HTML_GETOBJECT");
LRESULT result = 0;
SendMessageTimeout(hwnd, msg, NULL, NULL, SMTO_ABORTIFHUNG, 10000, (PDWORD_PTR)&result);
if (!result)
return;
// get main document object
IHTMLDocument3 *doc = NULL;
ObjectFromLresult(result, IID_IHTMLDocument3, NULL, (void**)&doc);
if (!doc)
return;
CComVariant varint;
CComVariant varstr;
IHTMLElementCollection* pElemCollections=NULL;
CComBSTR name(L"input")
if (FAILED(doc->getElementsByTagName(name, &pElemCollections)))
return;
long nelm;
pElemCollections->get_length(&nelm);
...