获取IE输入input标签的输入内容,获得doc2文档GetgetElementById为什么为空? 5C

获得的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不为空");
c++

2个回答


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问