获得的Docment文档后无法获取指定ID元素怎么办
32位Dll注入获取Internet Explorer_Server,替换了窗口之后获得Docment2使用GetelementByid
获得指定元素对象为空是为什么
CComPtr<IHTMLDocument2> GetDocmentInterface(HWND hwnd)
{
CoInitialize(NULL);
HINSTANCE hInst = ::LoadLibrary(_T("OLEACC.DLL"));
CComPtr<IHTMLDocument2> pDoc2 = NULL;
if (hInst != NULL)
{
printfMessage("加载dll成功");
if (hwnd != NULL)
{
CComPtr<IHTMLDocument> spDoc = NULL;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));//定义一个新的窗口消息
SendMessageTimeout(hwnd, nMsg, 0L, 0L, SMTO_BLOCK, 2000, (PDWORD_PTR)&lRes);//将指定的消息发送到一个或多个窗口
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hInst, "ObjectFromLresult");
if (pfObjectFromLresult != NULL)
printfMessage("窗口替换成功");
pfObjectFromLresult(lRes, IID_IHTMLDocument2, 0, (void**)&pDoc2);
}
::FreeLibrary(hInst);
}
else
printfMessage("获取文档失败");
if (pDoc2 != NULL)
{
printfMessage("获取文档成功");
}
return pDoc2;
}
void GetNameEdit(HWND hwnd)
{
CComPtr<IHTMLDocument2>&pDoc2 = GetDocmentInterface(hwnd);
if (pDoc2)
{
printfMessage("doc2不为空");
CComQIPtr<IHTMLDocument3> doc3 = pDoc2;
CComPtr<IHTMLElement> spElement;
if (doc3)
{
printfMessage("doc3不为空");
HRESULT hr;
hr= doc3->getElementById(L"pw_box", &spElement);
char str[20];
sprintf(str, "%#x", hr);
printfMessage(str);
if (spElement!=NULL)
{
int Error = GetLastError();
printfMessage("Ele错误码2:", Error);
printfMessage("Ele不为空");