从ie句柄中取得IHTMLDocument2,弹出窗口为什么不行啊大家帮顶啊多谢先

从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。
------解决方案--------------------
引用:
那这个函数怎么修改一下呢?
不知道怎么取得正确的IWebbrowser2,但是你要的不是IHTMLDocument2吗?
------解决方案--------------------
。。。
Function GetIEFromHWND(WHandle: HWND; Var IE: IWebbrowser2; var Doc: IHTMLDocument2): 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);
  Doc := pDoc;
  If Result = S_OK Then
  (pDoc.parentWindow As IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
  Finally
  FreeLibrary(hInst);
  End;
  End;
End;

调用会吧。。。
------解决方案--------------------
只有红色的地方是新添加的,够简单吧?