怎样访问Internet Explorer中的WebBrowser

[Delphi]怎样访问Internet Explorer中的WebBrowser [转贴 2009-12-30 19:10:38]

 字号:大 中 小

下面就是一个例子展示如何从打开的Internet Explorer中取得其网页元素的HTML源代码:



const
  RSPSIMPLESERVICE = 1;
  RSPUNREGISTERSERVICE = 0;

type
  TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;

function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  MSG: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
  hInst := LoadLibrary(‘Oleacc.dll‘);
  @ObjectFromLresult := GetProcAddress(hInst, ‘ObjectFromLresult‘);
  if @ObjectFromLresult <> nil then
  begin
    try
      MSG := RegisterWindowMessage(‘WM_HTML_GETOBJECT‘);
      SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
        (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
    finally
      FreeLibrary(hInst);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  All: IHtmlElementCollection;
  HtmlElement: IHtmlElement;
  I: Integer;
  Document: IHtmlDocument2;
  IE: IWebBrowser2;
  Wnd: HWND;
  WndChild: HWND;
begin
  Wnd := FindWindow(‘IEFrame‘, nil);
  if Wnd = 0 then
  begin
    MessageDlg(‘No Running instance of Internet Explorer!‘, mtError, [mbOK], 0);
  end;
  // walk Shell DocObject View->Internet Explorer_Server
  WndChild := FindWindowEX(Wnd, 0, ‘Shell DocObject View‘, nil);
  if WndChild <> 0 then
  begin
    WndChild := FindWindowEX(WndChild, 0, ‘Internet Explorer_Server‘, nil);
    if WndChild <> 0 then
    begin
      GetIEFromHWnd(WndChild, IE); //Get Iwebbrowser2 from Handle
      Document := IE.Document as IHtmlDocument2;
      if Assigned(Document) then
      begin
        All := Document.All;
        for I := 0 to All.Length - 1 do
        begin
          HtmlElement := All.item(i, 0) as IhtmlElement;
          SourceView.Lines.Add(IntToStr(i) + ‘ ‘ + HTmlElement.innerHTML);
        end;
      end;
    end;
  end;
end;

uses MSHTML,ActiveX

TIID可能是TGUID

WndChild := FindWindowEX(Wnd, 0, ‘Shell DocObject View‘, nil); 
此句在IE7下获取不了句柄呀? 
有没有人在IE7下获取‘Shell DocObject View‘的句柄的例子?

以下是TestComplete的脚本,可见IE 7下多了一个TabWindowClass,你应该知道该怎么做了吧!

p = Sys.WaitProcess("iexplore"); 
w = p.WaitWindow("IEFrame", "*", -1); 
if (! w.Exists) 
p = Sys.WaitProcess("explorer"); 
// IE should be running now... 
if (p.Exists) { 
w = p.Window("IEFrame", "*",1); 
// Give IE 3 seconds to start, check for the IE7 TabWindowClass first... 
if (w.WaitWindow("TabWindowClass", "*", -1, 3000).Exists) 
ie = w.Window("TabWindowClass", "*").Window("Shell DocObject View").Window("Internet Explorer_Server", "", 1); 
else 
ie = w.Window("Shell DocObject View").Window("Internet Explorer_Server", "", 1); 
page = ie.Page("*");

非常感谢您 Icebird,我在 
WndChild := FindWindowEX(Wnd, 0, ‘Shell DocObject View‘, nil); 
前面增加了一句代码, 
WndTab := FindWindowEX(Wnd, 0, ‘TabWindowClass‘, nil); 
就可以在IE7下获取句柄了。

时间: 2024-08-03 16:39:59

怎样访问Internet Explorer中的WebBrowser的相关文章

转载:关于 WebBrowser只对浏览器外应用程序以及在Internet Explorer 中以提升权限运行的应用程序启用

我是根据很多大神写的博客,以及我自己在做项目的时候做的关于提升Silverlight 中WebBrowser 提升信任的问题的总结: 1)选中Silverlight主程序,右键“属性”---“Sliverlight”,如途中用红线圈起来的位置要选中: 2)选择签名:点击“创建测试证书”,输入证书的密码:然后点击“更详细信息”--“详细信息”--“复制到文件” 复制到文件 就是导出自己创建的证书文件,后面的导出私钥的问题根据自己的情况来选择:导出证书后,双击安装证书, 3)选择证书存储位置:安装两

定制Internet Explorer下载管理器

Implementing a Custom Download Manager 实现一个定制的下载管理器 The ability to implement a custom download manager was introduced in Microsoft Internet Explorer 5.5. This feature enables you to extend the functionality of Windows Internet Explorer and WebBrowser

如何使用BHO定制你的Internet Explorer浏览器

一.简介 有时,你可能需要一个定制版本的浏览器.在这种情况下,你可以自由地把一些新颖但又不标准的特征增加到一个浏览器上.结果,你最终有的只是一个新但不标准的浏览器.Web浏览器控件只是浏览器的分析引擎.这意味着仍然存在若干的与用户接口相关的工作等待你做――增加一个地址栏,工具栏,历史记录,状态栏,频道栏和收藏夹等.如此,要产生一个定制的浏览器,你可以进行两种类型的编程――一种象微软把Web浏览器控件转变成一个功能齐全的浏览器如Internet Explorer:一种是在现有的基础上加一些新的功能

什么是64位和32位internet explorer

如果您使用 64 位版本的 Internet Explorer 时,您会遇到问题,请尝试使用 32 位版本的 Internet Explorer 查看同一 Web 站点.如果问题发生在这两个版本的 Internet Explorer 中,您必须确定问题是否由一个 Web 对象,对象所致,或如果问题由 Internet Explorer 引起. 有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 154036  (http://support.microsoft.

如何关闭Internet Explorer 增强的安全配置

什么是Internet Explorer 增强的安全配置? 简单的说就是在你访问一个未标记为信任的网站的时候给你弹出一个提示,如下图: 如果你认为这个网站是可信任的,就点击“添加”按钮,把它添加到信任区,这样就可以访问了,否则的话就不能访问, 类似于防火墙,只是它主要是针对网址进行过虑,不在信任区的网址都无法访问,从而有效的避免来自恶意网站的攻击. 但有个前提条件,你得知道哪个网址是安全的才行,对于大多数人来说,哪里知道到底安不安全啊! 再说了,即使网址是安全的,也不能保证内容一定是安全的,万一

Internet Explorer 11 Enterprise Mode 详解

白驹过隙,已经三月未能及时更新博文,今天为大家分享有关IE 11 Enterprise Mode(企业模式)两个章节内容,之前看到好多群里讨论有关IE11企业模式的问题,这里简单做一下汇总,第一章为IE11企业模式详解,第二章为企业模式排错,希望对大家理解IE 11 Enterprise Mode的含义及企业批量开启及排错有帮助,谢谢. 一.IE 11企业模式简介: 企业模式是可以在 Windows 8.1 更新和 Windows 7 设备的 Internet Explorer 11 上运行的一

编写IE插件的框架Add-in Express for Internet Explorer and .net 下载及使用方法

原文来自龙博方案网http://www.fanganwang.com/product/1362转载请注明出处 Add-in Express for Internet Explore 是第一个适用于开发 IE 附件的可视化工具. 它完全支持IE 扩展 API控件,并且使得 add-on 开发和配置更方便. 可视化设计: 你只需要写功能代码Add-in Express 完全基于 Rapid Application Development 方法,并且使得你可以通过一些点击来开发专业的 Internet

企业IT管理员IE11升级指南【2】—— Internet Explorer 11 对Adobe Flash的支持

Internet Explorer 11 对Adobe Flash的支持 在Windows 8.1上,Adobe Flash被作为一个平台功能包括在内,可运行于Internet Explorer和桌面版Internet Explorer.用户可使用“管理加载项”对话框启用或关闭此功能. 同时管理员也可以使用组策略设置“在Internet Explorer中关闭Adobe Flash,阻止应用程序使用Internet Explorer技术实例化Flash对象”启用或关闭此功能. GPO设置路径:

如何消除“为帮助保护您的安全,Internet Explorer 已经限制此文件显示可能访问您计算机

如何消除“为帮助保护您的安全,Internet Explorer 已经限制此文件显示可能访问您计算机的活动内容.单击此处查看选项...”每次打开都出现警告音,可以打开浏览器的工具--> Internet选项--> 高级--> 安全---> 找到"允许活动内容在我的计算机上的文件中运行" ,将其打上勾,下次就不再提示了提示WINDOWS已经阻止此软件因为无法验证发行者