Delphi通过IE窗口句柄获取网页接口(IWebBrowser2)
主要用到的是MSAA(Microsoft Active Accessibility) 函数:ObjectFromLResult,该函数在动态链接库 oleacc.dll 中定义。
uses SHDocVw, MsHtml, ActiveX;
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
Result := S_False;
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;
调用例子,以下代码快速关闭所有打开的IE窗口:
procedure TForm1.Button1Click(Sender: TObject);
var
hCurWindow, hMainWnd, hTabWnd, hCldWnd:HWnd; //窗口句柄
WinClsName:array[0..255] of char;
IE1: IWebbrowser2;
begin
hCurWindow := GetWindow(Handle,GW_HWNDFirst); //获取第一个窗口的句柄
while hCurWindow<>0 do
begin
GetClassName(hCurWindow, @WinClsName, 255);
if String(WinClsName) = 'IEFrame' then
begin
hMainWnd := hCurWindow;
hCldWnd := hCurWindow;
hTabWnd := 0;
repeat //循环查找所有选项卡
hTabWnd := FindWindowEx(hMainWnd, hTabWnd, 'Frame Tab', nil);
if hTabWnd <> 0 then hCldWnd := FindWindowEx(hTabWnd, 0, 'TabWindowClass', nil);
if hCldWnd <> 0 then hCldWnd := FindWindowEx(hCldWnd, 0, 'Shell DocObject View', nil);
if hCldWnd <> 0 then hCldWnd := FindWindowEx(hCldWnd, 0, 'Internet Explorer_Server', nil);
if hCldWnd <> 0 then if GetIEFromHWnd(hCldWnd, IE1) = S_OK then //获取IWebBrowser2
begin
IE1.Quit; //关闭IE,也可以执行其他操作,呵呵
end;
until hTabWnd = 0;
end;
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT); //获取下一个窗口的句柄
end;
end;
Delphi通过IE窗口句柄获取网页接口(IWebBrowser2)的更多相关文章
- Delphi通过IE窗口句柄获取网页接口(IWebBrowser2) good
主要用到的是MSAA(Microsoft Active Accessibility) 函数:ObjectFromLResult,该函数在动态链接库 oleacc.dll 中定义. uses SHDoc ...
- vc++获取网页源码之使用import+接口方式
1.使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #impo ...
- delphi 获取网页源代码
//获取网页源代码 var s: string; begin s := WebBrowser1.OleObject.document.body.innerHTML; //body内的所有代码 ...
- delphi WebBrowser控件上网页验证码图片识别教程(一)
步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...
- 【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS
地址: http://blog.csdn.net/hujkay作者:Jekkay Hu(34538980@qq.com)关键词:Windows,curl,ssl, visual c++ 2005, ...
- C# HttpWebRequest 绝技 根据URL地址获取网页信息
如果要使用中间的方法的话,可以访问我的帮助类完全免费开源:C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地 ...
- 获取网页上数据(图片、文字、视频)-b
Demo地址:http://download.csdn.net/detail/u012881779/8831835 获取网页上所有图片.获取所有html.获取网页title.获取网页内容文字... . ...
- DELPHI 通過窗口句柄或窗口标题得到进程句柄
DELPHI 通過窗口句柄或窗口标题得到进程句柄2009年05月08日 星期五 10:15procedure TForm1.Button1Click(Sender: TObject);varhWind ...
- vc++获取网页源码
1. 获取网页源码的步骤: com组件的初始化 创建WinHttpRequest对象 创建并实例化WinHttpRequest组件 调用Open方法打开连接 调用Send方法发送请求 使用Respon ...
随机推荐
- 【ZZ】堆和堆的应用:堆排序和优先队列
堆和堆的应用:堆排序和优先队列 https://mp.weixin.qq.com/s/dM8IHEN95IvzQaUKH5zVXw 堆和堆的应用:堆排序和优先队列 2018-02-27 算法与数据结构 ...
- linux安装tomcat9
0:环境准备 : 安装tomcat需要先配置jdk,所以没有配置jdk同学,先移步Linux安装JDK 或者使用比较便捷的方法,就是apt-get或者yum安装openJDK,这样做的话,会帮 ...
- [UE4]透明按钮
Background Color的透明度设置为0,就能让按钮背景完全透明,但是按钮里面的子控件并不会跟着透明
- centos7+apache+svn配置 踩坑,注意权限问题。apache应用目录checkout应用 必须用这个命令:svn co file:///home/svn/test/ test ,通过svn add * &&commit 及任意修改都是不行的
阅读帮助 命令提示符 [root@server-002 ~]# 表示当前服务root用户执行的命令 [svn@server-002 ~]$ 表示普通用户svn执行的命令 [root@localhost ...
- Android获取文件夹下的所有子文件名称;
public static List<String> getFilesAllName(String path) { File file=new File(path); File[] fil ...
- redis如何随系统启动
Redis可以通过命令redis-server启动,但这种启动方式适用于开发环境,对于生产环境来说,配置好redis的配置文件,并使redis随linux启动则更加方便些,下面则记录下redis如何随 ...
- linux:ubuntu安装mysql(一)
1.下载MySQL安装包(MySQL Community Server) 地址:https://dev.mysql.com/downloads/mysql/ 2.解压 tar -xvf mysql-s ...
- vue 整合element-ui
本文主要介绍如何在vue框架中结合elementUI. 本文主要参考: http://element-cn.eleme.io/#/zh-CN/component/quickstart 1.阅读本文 ...
- Strandbeest mechanism and Leg mechanism
I have to say besides computer science study, I'm also interested in Leg mechanism. Share two keywor ...
- transport error 202: bind failed: 地址已在使用
tomcat启动报错是因为:在catalina.sh中设置了调试启动参数 编辑catalina.sh全局搜索下 address= 去掉或者改一下address端口号,重启tomcat 另一种情况可能是 ...