从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.youkuaiyun.com/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


c++内嵌IWebBrowser2功能整理 目的:加深对IWebBrowser2的理解,整理。方便以后学习和使用。也方便需要这反面的朋友少点弯路。 声明:有些知识点是本人在使用和学习中借助网络搜索到的,所有难免会有雷同,我会尽量标注原著的出处,当然也可能找不到原著的出去了,如果牵扯到版权或者其他的可以通知我,我会跟你一同处理。本文的源码也有部分是来自网络和msdn上面,出处我也会尽量标明。 前言:前段时间,一个大学同学问我,在win下面 阅读详情

相关推荐

通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口

通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口,里面是源代码,分享给大家

如何: 在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 1769

UReport2 报表设计器 在线表格

UReport2官网 一、UReport2报表设计器 UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Excel表格! 1、报表设计器 2、设计一个简单的用户列表展示 二、可编辑表格 扩展了layui的表格,支持多元化数据编辑(单选,多些、日期、下拉联动),开发简单、高效、便捷。有了它就可以轻松开发类似进销存系统的表格录入功能了,用户拿来即用! 三、主从表录......

ejinxian的专栏 2万+

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

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

iseekcode的专栏 1626

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 362

从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界

本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。

weixin_27956639的博客 263

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

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

贺新征的专栏 4206

最新Linux CSI Tools安装教程(两台主机,一发一收)(监控模式)

无线感知之CSI Tools工具安装,最新在监控模式下采集CSI数据,

h1998040218的博客 3033

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

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

jacky_qiu的专栏 1万+

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 307

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 899

链接:MSDN UserNet等

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

vcmute的专栏 1万+

树莓派 5 AI 套件(Hailo)示例

该用户自定义类作为输入传递给回调函数,该函数在管道输出上运行。它用于主程序与回调函数之间的通信。它对 hailo_rpi_common::app_callback_class 进行了扩展,并可根据应用程序的具体情况定制附加变量和方法。

机器人控制与仿真应用 4115

从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的专栏 865

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

前程算法屋的博客 1023

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

dragoo1的专栏 2385

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vbs获取程序窗体句柄_根据IE窗口句柄hWnd获得IWebBrowser接口

关于如何根据IE窗口句柄hWnd获得IWebBrowser接口,网络上代码很多,大多是使用了MSAA里的一个函数GetObjectFromLResult进行获取,一方面,许多朋友尤其是VB爱好者对MSAA技术并不了解,另一方面,用此方法非常繁琐。我的偶象之一超级绿豆甚至在2005年的时侯使用汇编来获取IWebBrowser,虽然思路和方法都很好,但不容易理解和掌握。其实使用Sehll对象,可以非常...

weixin_30825953的博客 1081

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

关于如何根据IE窗口句柄hWnd获得IWebBrowser接口,网络上代码很多,大多是使用了MSAA里的一个函数GetObjectFromLResult进行获取,一方面,许多朋友尤其是VB爱好者对MSAA技术并不了解,另一方面,用此方法非常繁琐。我的偶象之一超级绿豆甚至在2005年的时侯使用汇编来获取IWebBrowser,虽然思路和方法都很好,但不容易理解和掌握。其实使用Sehll对象,可以非常

lbuskeep的专栏 6895

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

这几天不知乍搞的,晚上总睡不着。反正闲着没事,加之几天没更新博客了,所以写了这段代码。    关于如何根据IE窗口句柄hWnd获得IWebBrowser接口,网络上代码很多,大多是使用了MSAA里的一个函数GetObjectFromLResult进行获取,一方面,许多朋友尤其是VB爱好者对MSAA技术并不了解,另一方面,用此方法非常繁琐。我的偶象之一超级绿豆甚至在2005年的时侯使用汇

lyserver的专栏 3065

python通过hwnd获得IWebBrowser2(原创)

项目中用到了查找已打开的ie窗口,通过的解决方法是用ShellWindows,测试了一下该方法获得的ie窗口不全。 后来想到了通过hwnd来获取,在C++、Delphi等工具中都没有问题,但python总是失败,看了官方的邮件列表也没有解决方案。 后来从官方的demo中找到灵感,在这里讲该函数分享下: SID_STopLevelBrowser = IID('{4C96BE40-915C-...

weixin_34198453的博客 452
上一篇: [收藏] 转:frame、frameset和iframe的区别
下一篇: DOM应用---遍历网页中的元素
skyremember
博客等级 码龄20年 204粉丝 484原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值