从ie句柄中取得IHTMLDocument2,弹出窗口为什么不行啊???大家帮顶啊,谢谢先
我采用如下函数:
Type
TObjectFromLResult = Function(LRESULT: lResult; Const IID: TIID; WPARAM: wParam; Out pObject): HRESULT; stdcall;
Function GetIEFromHWND(WHandle: HWND; Var IE: IWebbrowser2): HRESULT;
Var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
Begin
hInst := LoadLibrary('Oleacc.dll');
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
If @ObjectFromLresult <> Nil Then
Begin
Try
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
If Result = S_OK Then
(pDoc.parentWindow As IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
Finally
FreeLibrary(hInst);
End;
End;
End;
先获取句柄。这里为了测试,我直接用spy++抓取的句柄手动赋给WndChild。正常网页没事,弹出窗口
GetIEFromHWnd(WndChild, IE);
获取的ie始终是nil啊。
来了兄弟都给帮顶啊。着急死了。
[解决办法]
你断点调试一下,pDoc是接收到了IHTMLDocument2值,只是IE(IWebbrowser2)返回了nil。
[解决办法]