从HWnd得到IWebbrowser2接口

C# 通过HWND获取IE的IWebBrowser2接口 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropService 阅读详情
程序代码
IWebBrowser2[color=#0000ff]* 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 ;
}[/color]
 

www.zxboy.com/article.asp?id=100 43K 2008-10-23 - 百度快照




通过 IHTMLDocument2 接口操作网页
2008年11月23日 星期日 下午 10:08
#include <mshtml.h>
#include <oleacc.h>
#include "atl//atlbase.h"
// 使用BCB中自带的oleacc.lib,也可以从IDE中添加:Project-->Add to Project
// 注意这里用的是我的机器上的路径
#pragma link "D://Program Files//Borland//CBuilder6//Lib//Psdk//oleacc.lib"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 这里直接指定一个句柄,实际应用中可以通过各种方式获取句柄
HWND hWnd = (void *)0x001402B6;

IHTMLDocument2* spDoc2 = NULL;
DWORD dwRes;

UINT nMsg = ::RegisterWindowMessage("WM_HTML_GETOBJECT");
::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);

// 因为使用了静态的lib,不需要再GetProcAddress取函数地址了
HRESULT hr = ObjectFromLresult(dwRes, IID_IHTMLDocument, 0, (void **)&spDoc2);
if(SUCCEEDED(hr))
{
IDispatch *pDisp;
IHTMLWindow2 *pWin;
spDoc2->get_Script(&pDisp);
pDisp->QueryInterface(IID_IHTMLWindow2, (void **)&pWin);
pDisp->Release();
pWin->get_document(&spDoc2);
pWin->Release();

// 将页面的背景设为蓝色
VARIANT vColor;
vColor.vt = VT_BSTR;
vColor.bstrVal = WideString("blue").c_bstr();
spDoc2->put_bgColor(vColor);
}
// 以上代码在用IE打开一个网页以后,用Spy4Win取得Internet Explorer_Server
// 窗口的句柄,并用以上代码测试成功
}

类别:c++builder | 添加到搜藏 | 浏览( 20) | 评论 (0)
 

http://hi.baidu.com/ben2000/blog/item/ebb8d61fad145c64f724e447.html




根据Internet Explorer_Server窗口得到IHtmlDocument2接口     选择自 111222 的 Blog
关键字  根据Internet Explorer_Server窗口得到IHtmlDocument2接口/IE/WebBrowser
出处 

代码很少,自己看

#include <mshtml.h>
#include <atlbase.h>
#include <oleacc.h>

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
 TCHAR buf[100];

 ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
 if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 ) /

{
  *(HWND*)lParam = hwnd;
  return FALSE;
 }
 else
  return TRUE;
};

//You can store the interface pointer in a member variable
//for easier access
void CDlg::OnGetDocInterface(HWND hWnd)
{
 CoInitialize( NULL );

 // Explicitly load MSAA so we know if it's installed
 HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
 if ( hInst != NULL )
 {
  if ( hWnd != NULL )
  {
   HWND hWndChild=NULL;
   // Get 1st document window
   ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
   if ( hWndChild )
   {
    CComPtr<IHTMLDocument2> spDoc;
    LRESULT lRes;
   
    UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
    if ( pfObjectFromLresult != NULL )
    {
     HRESULT hr;
     hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
     if ( SUCCEEDED(hr) )
     {
      CComPtr<IDispatch> spDisp;
      CComQIPtr<IHTMLWindow2> spWin;
      spDoc->get_Script( &spDisp );
      spWin = spDisp;
      spWin->get_document( &spDoc.p );
      // Change background color to red
      spDoc->put_bgColor( CComVariant("red") );
     }
    }
   } // else document not ready
  } // else Internet Explorer is not running
  ::FreeLibrary( hInst );
 } // else Active Accessibility is not installed
 CoUninitialize();
}


相关文章


http://dev.csdn.net/article/11/11722.shtm


根据Internet Explorer_Server窗口得到IHtmlDocument2接口:程序设计,VC 专栏


代码很少,自己看

#include <mshtml.h>
#include <atlbase.h>
#include <oleacc.h>

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
 TCHAR buf[100];

 ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
 if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 ) 

{
  *(HWND*)lParam = hwnd;
  return FALSE;
 }
 else
  return TRUE;
};

//You can store the interface pointer in a member variable
//for easier access
void CDlg::OnGetDocInterface(HWND hWnd)
{
 CoInitialize( NULL );

 // Explicitly load MSAA so we know if it's installed
 HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
 if ( hInst != NULL )
 {
  if ( hWnd != NULL )
  {
   HWND hWndChild=NULL;
   // Get 1st document window
   ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
   if ( hWndChild )
   {
    CComPtr<IHTMLDocument2> spDoc;
    LRESULT lRes;
   
    UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
    if ( pfObjectFromLresult != NULL )
    {
     HRESULT hr;
     hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
     if ( SUCCEEDED(hr) )
     {
      CComPtr<IDispatch> spDisp;
      CComQIPtr<IHTMLWindow2> spWin;
      spDoc->get_Script( &spDisp );
      spWin = spDisp;
      spWin->get_document( &spDoc.p );
      // Change background color to red
      spDoc->put_bgColor( CComVariant("red") );
     }
    }
   } // else document not ready
  } // else Internet Explorer is not running
  ::FreeLibrary( hInst );
 } // else Active Accessibility is not installed
 CoUninitialize();
}



http://www.pujiwang.com/Html/VisualC++/2006-1/6/0106841.html


IFileDialog-》IServiceProvider-》IShellView-》IFolderView-》IShellItemArray 一段代码,诉说一段历程 { HRESULT hr = S_FALSE; IServiceProvider* sp = NULL; hr = pfd->QueryInterface(IID_IServiceProvider,(void **)&sp); if (SUCCEEDED(hr) && sp) { IShellBrowser* sb = NULL; hr = sp->Quer 阅读详情

相关推荐

2023年12月青少年C/C++软件编程(三级)等级考试试卷及答案解析

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。第一行一个数字n,n不超过100,表示有n*n的宿舍房间。接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。输出为一行,表达式的值。任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

长春高老师编程 1456

使用windows平台IWebBrowser2接口动态创建Web浏览器

使用windows平台IWebBrowser2接口动态创建Web浏览器 wtl平台(使用MFC类似),使用IWebBrowser2创建IE控件,然后浏览网页,当然也可以显示内存中的html字符流。 支持更改右键,支持禁用滚动条,支持word-break,功能强大,可扩展性强。方便自己修改后放入自己的代码中。js代码可回调c++代码。

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1107

如何: 在ActiveX 控件中获得顶层 IWebBrowser2 接口

此文章的信息应用于:Microsoft Internet Explorer (编程) 版本4.0, 4.01, 4.01 SP1, 4.01 SP2, 5, 5.01, 5.5 转者注:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q257717概要微软知识库文章 Q172763 信息:在ActiveX 中访问对象模型 说明了如何在控件中获得所在窗口的IWebBrowser2的引用。但是,开发者实际上经常需要的是饱含框架集的顶

SHYBT'S BLOG 1766

通过窗口句柄获得 IWebBrowser2 接口源码

 通过窗口句柄获得 IWebBrowser2 接口源码function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;varhInst: HWND;lRes: Cardinal;MSG: Integer;pDoc: IHTMLDocument2;ObjectFromLresult: TObjectFromLresult;

iseekcode的专栏 1623

从资源管理器窗口中获取信息

有的时候,软件开发是创造新的东西,不过更常见的是把现有的东西组合到一起。今天的难题就属于后一种。给定一个窗口句柄,你可以判定:(1)是否是一个资源管理器窗口,如果是,那么(2)它正在显示哪个文件夹,而且(3)当前焦点在哪一项上。这其实不是一件难事。你只需把许多小碎片拼凑起来就可以。一切从 ShellWindows 对象开始,它代表所有打开的外壳窗口。你可以使用 Item 属性遍历它们。

贺新征的专栏 4204

从一个窗口句柄获取IWebBrowser2和IHTMLDocument2接口

从一个窗口句柄获取IWebBrowser2和IHTMLDocument2接口更新日期:2010-1-10测试环境:VC6.0+WinXP━━━━━━━━━━━━━━━━━━━━━━━━将以下代码张贴到对话框程序,运行即可。调用之前请确保打开IE浏览器愿顺利!阿弥陀佛!/****************************************************************************从一个窗口句柄获取IHTMLDocument2接口使用完后要调用Release如果找不到接

jacky_qiu的专栏 1万+

webbrowser获取跨域的sessionStorage的值和cookie的值

这是个很麻烦的问题。   我需要yo

笨狐狸 8488

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

captainchain的专栏 862

已知IWebBrowser2接口,如何获得其Internet Explorer_Server窗口句柄?

关键字:IWebBrowser2,HWND,::GetCursorPos,::ScreenToClient方法:HRESULT IWebBrowser2::get_HWND(long *pHWND);代码:#include IServiceProvider* pServiceProvider = NULL;if (SUCCEEDED(pWebBrowser2->QueryInterface(  

dragoo1的专栏 2382

Delphi通过窗口句柄获得IWebBrowser2接口源码

 function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;var hInst: HWND; lRes: Cardinal; MSG: Integer; pDoc: IHTMLDocument2; ObjectFromLresult: TObjectFromLresult;begi

编程资料收集与共享交流 2017

链接:MSDN UserNet等

Q我想知道如何在VC中实现可塌陷的PanelBar界面(类似于OutlookBar)? T可塌陷的PanelBar界面比outlookbar更有吸引力,Windows XP左边的导航工具面版就是采用这种风格,采用这种风格的应用程序也越来越多,比如各种杀毒软件,可能delphi提供的vcl组件可以简化这种操作,对于这种“傻瓜式”的实现我不喜欢。我还是想用C++,实现这种界面,而且我不喜欢附带额外的动

vcmute的专栏 1万+

关于几个HTML文档接口的使用探讨

关于几个HTML文档接口的使用探讨 赵湘宁 问题:       在使用Active Accessibility SDK的过程中,我从某个窗口的句柄来获得IHTMLDocument2指针。有没有什么方法可以从IHTMLDocument2指针来获得IWebBrowser2指针?我用QueryInterface在两个接口(IHTMLDocument2

lithe的Blog 2299

取得IWebBrowser2的窗体句柄

IWebBrowser2* pIWeb = IServiceProvider* pServiceProvider = NULL;  if (SUCCEEDED(pIWeb->QueryInterface(                     IID_IServiceProvider,                      (void**)&pServiceProvider)))    

tancheng的专栏 1794

免费沙箱软件模拟支付_CVE20193969:Comodo沙箱逃逸提权漏洞分析

译文声明本文是翻译文章,文章原作者tenable-techblog,文章来源:medium.com原文地址:https://medium.com/tenable-techblog/comodo-from-sandbox-to-system-cve-2019-3969-b6a34cc85e67译文仅供参考,具体内容表达以及含义原文为准0x00 前言AV(反病毒软件)一直以来都是漏洞挖掘的绝...

weixin_28323057的博客 567

Windows资源管理器相关信息获取

原文链接 翻译参考 有的时候,软件开发是创造新的东西,不过更常见的是把现有的东西组合到一起。今天的难题就属于后一种。 给定一个窗口句柄,你可以判定:(1)是否是一个资源管理器窗口,如果是,那么(2)它正在显示哪个文件夹,而且(3)当前焦点在哪一项上。 这其实不是一件难事。你只需把许多小碎片拼凑起来就可以。 一切从 ShellWindows 对象开始,它代表所有打开的外壳窗口。你可以使用 ...

猫影 1390

【小沐学C++】C++ MFC中嵌入web网页控件(WebBrowser、WebView2、CEF3)

WebBrowser控件最常见的用途之一是向应用程序添加 Internet 浏览功能。使用 IWebBrowser2 接口,可以浏览到本地文件系统、网络或万维网上的任何位置。可以使用IWebBrowser2::Navigate 方法告知控件要浏览到哪个位置。第一个参数是包含位置名称的字符串。要浏览到本地文件系统或网络上的某个位置,请指定文件系统位置的完整路径或网络上该位置的 UNC 名称。若要浏览到万维网上的某个站点,请指定该站点的 URL。╮( ̄▽ ̄)╭。

爱看书的小沐 9362

DELL-SC5020控制器更换手册.pdf

DELL-SC5020控制器更换手册

上一篇: [收藏] 转:frame、frameset和iframe的区别
下一篇: DOM应用---遍历网页中的元素
skyremember
博客等级 码龄20年 203粉丝 484原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值