在浏览器中,可以得到IE的句柄,但不知如何得到IWebBrowser 的句柄,本人试过
Supports(IWebBrowser,IOleWindow,OleWindow);
OleWindow.GetWindow(HWND),但没法得到,请哪位高人指点!

解决方案 »

  1.   

    拦截CoCreate 函数。
    我试过Msn Messenger一个方法,不知是否对IE有用。
      

  2.   

    我简单说下思路EnumChildWindows 得到各子窗体的HWND然后分别判断各窗体的类名webbrowser的classname 是 Internet Explorer_server
      

  3.   

    可以如下方法。。
    至于找HWND,classname是Internet Explorer_server====================================================
    function GetIEFromHWND(hWnd: HWND; var IE: IWebbrowser2): HRESULT;
    var
    hInst: THandle;
    lRes: Cardinal;
    MSG: Integer;
    pDoc: IHTMLDocument2;
    ObjectFromLresult: TObjectFromLresult;
    begin
        result:=S_OK;
        if (hWnd<=0) then
            exit;
    hInst := LoadLibrary('Oleacc.dll');
        if (hInst>0) then
        try
            @ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
            MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
            SendMessageTimeOut(hWnd, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
            Result := ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, pDoc);
            if Result = S_OK then
            begin
                (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2,    IE);
            end;
        finally
            FreeLibrary(hInst);
        end;
    end;
      

  4.   

    这里的反应也太慢啦,我早已经找到解决方法啦,算啦,拿出来共享吧!(IWebBrowser2.document as IOleInPlaceObject).GetWindow(Handle)
    Handle就是!!谢谢各位的支持!