从HWND获取IE的IWebBrowser2接口的函数

IWebBrowser2* GetIEAppFromHWnd(HWND hIEWindow)
{
 HWND hWnd   = FindWindowEx(hIEWindow, 0, "Shell Embedding", NULL);
 HWND hWndChild = FindWindowEx(hWnd, 0, "Shell DocObject View", NULL);
 hWnd      = FindWindowEx(hWndChild, 0, "Internet Explorer_Server", NULL);

 if ( hWnd == NULL ) return FALSE;

 // 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA
 HINSTANCE hInst = LoadLibrary( _T("OLEACC.DLL") );
 IWebBrowser2* pWebBrowser2 = NULL;

 if ( hInst == NULL ) return NULL;


 LRESULT lRes;
 UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
 ::SendMessageTimeout( hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

 LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
 if ( pfObjectFromLresult != NULL )
 {
  HRESULT hr;
  CComPtr<IHTMLDocument2>spDoc;

  hr=pfObjectFromLresult(lRes,IID_IHTMLDocument2,0,(void**)&spDoc);

  if ( SUCCEEDED(hr) )
  {
   CComPtr<IHTMLWindow2>spWnd2;
   CComPtr<IServiceProvider>spServiceProv;
   hr=spDoc->get_parentWindow ((IHTMLWindow2**)&spWnd2);

   if(SUCCEEDED(hr))
   {
    hr=spWnd2->QueryInterface (IID_IServiceProvider,(void**)&spServiceProv);
    if(SUCCEEDED(hr))
    {
     hr = spServiceProv->QueryService(SID_SWebBrowserApp,
      IID_IWebBrowser2,
      (void**)&pWebBrowser2);

     if (SUCCEEDED(hr))
     {
      ::FreeLibrary(hInst);
      return pWebBrowser2;
      //IDispatch *app;
      //hr = pWebBrowser2->get_Application(&app);
      //if (SUCCEEDED(hr))
      //{
      // //MessageBox(NULL, "BINGO", 0, MB_OK);
      // return app;
      //}
     }
    }
   }
  }
 }

 ::FreeLibrary(hInst);
 return NULL;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值