win32获取浏览器当前Tab的URL
代码都是win10上测试的
1. 获取IE的URL,Enum IE窗口的子句柄,找到className为Edit的句柄,然后用SendMessage WM_GETTEXT消息来获取:
上代码:
#include <iostream>
#include <string>
#include <windows.h> BOOL CALLBACK BrowserIEChildEnumProc(HWND hwndChild, LPARAM lParam)
{
char className[] = { };
GetClassName(hwndChild, className, );
char url[] = { }; std::string class_name(className);
if (class_name.compare("Edit") == )
{ SendMessage(hwndChild, WM_GETTEXT, sizeof(url), (LPARAM)url); // 必须用SendMessage, 不然用GetWindowText会得不到,因为是远程进程
std::cout << "IE Level Edit class : URL" << url << std::endl;
}
else if (class_name.compare("ComboBoxEx32") == )
{
SendMessage(hwndChild, WM_GETTEXT, sizeof(url), (LPARAM)url);
std::cout << "ComboBoxEx32 class : URL" << url << std::endl; }
else if (class_name.compare("TabWindowClass") == )
{
SendMessage(hwndChild, WM_GETTEXT, sizeof(url), (LPARAM)url);
std::cout << "TabWindowClass class : URL" << url << std::endl;
}
else
{ } return TRUE;
} BOOL CALLBACK BrowserEnumProc(HWND hwndChild, LPARAM lParam)
{
char className[] = { }; GetClassName(hwndChild, className, ); std::string class_name(className);
//std::cout << "Window Class is:" << class_name << std::endl;
if (class_name.compare("IEFrame") == )
{
EnumChildWindows(hwndChild, BrowserIEChildEnumProc, NULL);
}
else if (class_name.compare("Edit") == )
{
char url[] = { };
SendMessage(hwndChild, WM_GETTEXT, sizeof(url), (LPARAM)url);
std::cout << "Top Level Edit class : URL" << url << std::endl;
}
//else if ()
//{ //} return TRUE;
} int main()
{
EnumChildWindows(NULL, BrowserEnumProc, NULL); int d;
std::cin >> d;
return ;
}
通过windows的动态数据交换(DDE)技术来获取FireFox浏览器的URL(不支持Opera 和Chrome):
#include <iostream>
#include <string>
#include <windows.h> #include <ddeml.h> HDDEDATA CALLBACK
DdeCallback(UINT uType, UINT uFmt, HCONV hconv,
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
DWORD dwData1, DWORD dwData2)
{
return ((HDDEDATA)NULL);
} //请求数据
void DDERequest(DWORD idInst, HCONV hConv, char* szItem, char* sDesc)
{
HSZ hszItem = DdeCreateStringHandle(idInst, szItem, ); //给szItem和sDesc赋值
HDDEDATA hData = DdeClientTransaction(NULL, , hConv, hszItem, CF_TEXT,
XTYP_REQUEST, , NULL); //5秒超时 if (hData == NULL)
{
//请求数据失败
printf("Request failed: %s\n", szItem);
}
else
{
//成功获取到数据
char szResult[];
DdeGetData(hData, (unsigned char *)szResult, , ); printf("Request Success: %s\n", szResult);
}
} static void fetchFireFoxURL(){ DWORD idDde = ;
HCONV HConversation;
HSZ Server = NULL;
HSZ Topic = NULL; DdeInitialize(&idDde, (PFNCALLBACK)DdeCallback, APPCMD_CLIENTONLY, ); Server = DdeCreateStringHandle(idDde, "FireFox", CP_WINANSI);
Topic = DdeCreateStringHandle(idDde, "WWW_GetWindowInfo", CP_WINANSI); HConversation = DdeConnect(idDde, Server, Topic, NULL); if (HConversation == )
{
DdeUninitialize(idDde);
} char recvData[] = { };
//请求数据
DDERequest(idDde, HConversation, "\\Doc", recvData); //断开连接,释放资源
DdeDisconnect(HConversation);
DdeUninitialize(idDde); } int main()
{ fetchFireFoxURL(); int d;
std::cin >> d;
return ;
}
references:
https://github.com/heenbo/my_test_c/blob/140f546b72ca7027fbd135978f236f7946ad2822/15_emacs/emacs-25.1/nt/ddeclient.c
https://msdn.microsoft.com/en-us/library/windows/desktop/ms648774(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms648775(v=vs.85).aspx
https://autohotkey.com/board/topic/17633-retrieve-addressbar-of-firefox-through-dde-message/page-2
http://bbs.csdn.net/topics/360011960
http://www.delphitop.com/html/xitong/1763.html
https://answers.microsoft.com/en-us/windows/forum/windows_8-networking/get-safari-browser-url-in-windows-application/b793cdb8-415e-4d4a-94ab-c35e6ea08dd2
http://stackoverflow.com/questions/3579649/get-url-from-browser-to-c-sharp-application
http://stackoverflow.com/questions/5317642/retrieve-current-url-from-c-sharp-windows-forms-application/33191637#33191637
win32获取浏览器当前Tab的URL的更多相关文章
- 如何获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- JS获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- 如何获取浏览器URL中查询字符串的参数?
如何获取浏览器URL中查询字符串的参数? 想要知道怎样解决这个问题,首先我们先认识一下Location对象. Location对象包含了当前页面与位置(url)相关的信息 URL示例:http://w ...
- js获取浏览器上一访问页面URL地址,document.referrer方法
如题,可用document.referrer方法获取上一页面的url 但是也有不可使用的情况 直接在浏览器地址栏中输入地址: 使用location.reload()刷新(location.href或者 ...
- 如何用js获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- 三个获取浏览器URL中参数值的方法
这三个是一般的获取浏览器传的参数值的方法,之前有用unescape()解码的方法,但是遇到汉字会产生乱码,所以用decodeURI(); 方法一: function getQueryString(na ...
- 获取浏览器url参数
//获取浏览器url参数 var methods ={ getQueryString: function (name) { var reg = new RegExp('(^|&)' + nam ...
- 获取浏览器中url的参数
例如: 浏览器的地址是:http://localhost:8080/src/views/moneyDetail?id=10 vue 获取浏览器的参数 获取id的参数:this.$route.query ...
- 获取浏览器信息 c#
Request.Browser.MajorVersion.ToString();//获取客户端浏览器的版本号 Request.Browser.Version.ToString();//获取客户端浏览器 ...
随机推荐
- 常用sql备份
统计数据库中表格数据行数所占空间和索引情况 set nocount on exec sp_MSForEachTable @precommand=N' create table ##( id int i ...
- Asp.net WebAPi Restful 的实现和跨域
现在实际开发中用webapi来实现Restful接口开发很多,我们项目组前一段时间也在用这东西,发现大家用的还是不那么顺畅,所以这里写一个Demo给大家讲解一下,我的出发点不是如何实现,而是为什么? ...
- 基于libnids的TCP数据流的还原(多线程实现) .
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接 ...
- Ios开发之多线程编程——NSThread
IOS程序在运行的时候是通过主线程来进行UI视图的更新和响应屏幕触摸事件,但是,在视图更新的时候,会有一些非常耗时的工作,这样我们会出现系统出现卡顿的现象,这是因为主线程堵塞造成的,这样会使用户体验非 ...
- 【Kafka】Kafka-配置参数详解-参数调优
Kafka-配置参数详解-参数调优 kafka 目录_百度搜索 为什么kafka使用磁盘而不是内存 - CSDN博客 Kafka 配置说明 - 風吹云动 - 博客园 kafka生产服务器配置 - Or ...
- Ext4中获取下拉框的值
var supplierCombo = Ext.getCmp("rkSupplierCombo_id"); var supplierId = supplierCombo.getV ...
- http://blog.csdn.net/u014595019/article/details/52805444
http://blog.csdn.net/u014595019/article/details/52805444 tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码 ...
- mke2fs 制作ext2文件系统image
方法1: 利用/dev/ram1: linux下有很多ram,我们用ram1,首先把ram1格式化成ext2文件系统[root@gucuiwen babylinux]# sudo mkfs.ext ...
- Linux Kernel 2:用户空间的初始化
上篇我们知道,kernel初始化后将启动init进程,那么这个进程将干些什么呢?除此之外,kernel还需要做些什么事情呢?(想想文件系统.根存储设备是在什么时候初始化的呢?) 先从文件系统初始化说起 ...
- oracle 嵌套查询
select dat.id, dat.voucher_id, dat.type, dat.state, dat.start_point, dat.start_floor, dat.end_point, ...