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();//获取客户端浏览器 ...
随机推荐
- Verilog 加法器和减法器(3)
手工加法运算时候,我们都是从最低位的数字开始,逐位相加,直到最高位.如果第i位产生进位,就把该位作为第i+1位输入.同样的,在逻辑电路中,我们可以把一位全加器串联起来,实现多位加法,比如下面的四位加法 ...
- Libxml2函数及使用方法概述【转】
https://blog.csdn.net/chengwenyao18/article/details/7176082 一.关于XML: 在开始研究 Libxml2 库之前,先了解一下XML的相关基础 ...
- [leetcode]Maximum Subarray @ Python
原题地址:https://oj.leetcode.com/problems/maximum-subarray/ 题意: Find the contiguous subarray within an a ...
- 移动前端调试工具-Weinre真机调试
之前做移动前端调试页面的时候就是简单的使用Chrome模拟器调试,能满足基本基本的需求,后来发现了基于Web Inspector(Webkit)的远程调试工具Weinre,可以在PC端直接调试运行在移 ...
- iOS开发-邮件发送
Web开发的时候邮箱注册登录是必不可少的,手机号可以更换,不过相对而言,邮箱只是用于比较重要的时候用到,比如找工作的时候必填的邮箱,注册网站会员的邮箱验证.现在的手机和Web的其实操作是一样的,大多数 ...
- C++类中的访问权限问题
纠结的东西: private,public,protected方法的访问范围.(public继承下)private: 只能由该类中的函数.其友元函数访问,不能被任何其他访问,该类的对象也不能访问. p ...
- javascript——选择行之后才可以进行控制操作
- Cognos11中关于CJAP第三方认证的相关配置
cognos11同样适用于自定义java程序的第三方认证,而且在测试方面给了直观的测试接口,如下图所示 当用户配置好了自定义java程序的认证之后,程序会提示用户输入我们自己的认证库用户信息例如adm ...
- 关于Linux路由表的route命令
转自:http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 查看 Linux 内核路由表 使用下面的 route 命令可以查看 Lin ...
- Socket 编程IO Multiplexing
Linux Socket 编程中I/O Multiplexing 主要通过三个函数来实现:select, poll,epoll来实现.I/O Multiplexing,先构造一张有关描述符的列表,然 ...