从HWnd得到IWebbrowser2接口

原创 2006年05月26日 11:25:00

IWebBrowser2* GetIEFromHWnd(HWND hIEWindow)
{ HWND hWnd ;
 if(hIEWindow==NULL){
   hWnd= FindWindow("IEFrame", NULL);
            if(hWnd==NULL)
   hWnd= FindWindow("CabinetWClass", NULL);
     if( hWnd == NULL){
      MessageBox (NULL,"No Running instance of Internet Explorer!","message", MB_OK);
     }
     // walk Shell DocObject View->Internet Explorer_Server
     HWND hWndChild = FindWindowEx(hWnd, 0, "Shell DocObject View", NULL);
     if(hWndChild !=0){
      hWndChild = FindWindowEx(hWndChild, 0, "Internet Explorer_Server", NULL);
  }
  hWnd=hWndChild;
 }
 else{
  hWnd=hIEWindow;
 }
 // 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA
 HINSTANCE hInst = LoadLibrary( _T("OLEACC.DLL") );
 IWebBrowser2* pWebBrowser2=NULL;
 if ( hInst != NULL ){
  if ( hWnd != 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);

      
      }
     }
    }

    }
   }
  
  ::FreeLibrary(hInst);
 }
 else{//如果没有安装MSAA
  MessageBox(NULL,_T("Please Install Microsoft Active Accessibility"),"Error",MB_OK);
 }
 return pWebBrowser2;
}

获得ie句柄,并根据句枘操作iwebbrowser2对象

var Wnd: HWND; WndChild:HWND; Hdoct:IHtmlDocument2; IE: iwebbrowser2; All: IHtmlElementColl...
  • zb0567
  • zb0567
  • 2014年07月16日 08:12
  • 737

从HWnd得到IWebbrowser2接口

程序代码IWebBrowser2[color=#0000ff]* GetIEFromHWnd(HWND hIEWindow){ HWND hWnd ; if(hIEWindow==NULL){   h...
  • skyremember
  • skyremember
  • 2008年12月02日 23:52
  • 3923

在IE中打开资源获取文档对象

procedure OpenInIEAndFillForm(AURL: string; UserID, UserPsw: string); var   i: Integer;   url, ht...
  • chinajobs
  • chinajobs
  • 2015年04月06日 09:37
  • 544

Delphi通过IE窗口句柄获取网页接口(IWebBrowser2)

主要用到的是MSAA(Microsoft Active Accessibility) 函数:ObjectFromLResult,该函数在动态链接库 oleacc.dll 中定义。 uses SH...
  • diligentcat
  • diligentcat
  • 2013年12月10日 13:15
  • 1553

C# 通过HWND获取IE的IWebBrowser2接口

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • Windowsvipcuvs
  • Windowsvipcuvs
  • 2014年06月14日 17:31
  • 570

c++内嵌IWebBrowser2功能整理

目的:加深对IWebBrowser2的理解,整理。方便以后学习和使用。也方便需要这反面的朋友少点弯路。 声明:有些知识点是本人在使用和学习中借助网络搜索到的,所有难免会有雷同,我会尽量标注原著的出处,...
  • nanjun520
  • nanjun520
  • 2016年11月03日 20:46
  • 4516

C++字符串完全指引之+——+Win32+字符编码

字符基础 -- ASCII, DBCS, Unicode   所有的 string 类都是以C-style字符串为基础的。C-style 字符串是字符数组。所以我们先介绍字符类型。这里有3种编码...
  • TimeMachine2012
  • TimeMachine2012
  • 2011年10月12日 17:05
  • 188

根据IE窗口句柄hWnd获得IWebBrowser接口

关于如何根据IE窗口句柄hWnd获得IWebBrowser接口,网络上代码很多,大多是使用了MSAA里的一个函数GetObjectFromLResult进行获取,一方面,许多朋友尤其是VB爱好者对MS...
  • lbuskeep
  • lbuskeep
  • 2012年05月30日 18:46
  • 4880

CWnd与HWND的区别与联系(相互转换)完全解析

区别            首先,从这两个单词的第一个字母即可知道两者之间的差别。熟悉MFC的人都知道在MFC中,类基本上都是以C开头的,这是一种规则约定,目的就是让人一看就知道它是一个类!     ...
  • to_Baidu
  • to_Baidu
  • 2017年03月03日 15:37
  • 708

[MFC] HWND(获取控件或窗体句柄) [大三TJB_708]

平台:visual studio 2010   1 C++窗体对象和HWND 窗体对象是一个继承于CWnd类的C++类的 对象。咱们可以用构造函数生成一个windows窗体,此windows窗体...
  • misskissC
  • misskissC
  • 2013年04月30日 18:02
  • 26889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从HWnd得到IWebbrowser2接口
举报原因:
原因补充:

(最多只允许输入30个字)