0
我试图填补从C++程序的Internet Explorer某种形式的输入字段,但我面对的随机错误,我希望是因为我的代码:的getElementsByTagName与IHTMLDocument3随机返回任何
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
从不被调用。
感谢
什么的IHTMLDocument2 :: get_readyState的结果,当这种情况发生? –
get_readyState返回“完整”,我可以没有问题地获得IHTMLDocument2 :: get_body。有时候,如果我得到nelm = 0并返回调试器将输入更改为INPUT并再次运行该行,它可以工作,但它也是随机的。 – Entretoize
与该代码我可以得到它的工作(对于A标签):'BSTR标记= L“A”; \t long nelm; \t int n = 0; \t do \t {\t \t n ++; \t \t if(tag == L“a”)\t \t \t tag = L“A”; \t \t else \t \t \t tag = L“a”; \t \t if(pElemCollections)\t \t \t pElemCollections-> Release(); if(FAILED(doc> getElementsByTagName(tag,&pElemCollections)))return; \t \t \t \t pElemCollections-> get_length(&nelm); \t}而(nelm == 0);' – Entretoize