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();//获取客户端浏览器 ...
随机推荐
- 在IIS上SSL的部署和启动SSL安全【转】
在这次的项目中遇见了这个问题,之前我并懂了不了多少,只对了SSL和HTTPS理论了解.但并不知道在实际中如何运行.经过自己在网上查阅一番,最后靠自己解决了这个问题,现在在这里和大家分享一下.如果写的有 ...
- 关于html+ashx开发中几个问题的解决方法 (转)
在跟html+ashx打交道的园友们肯定会发现,这种模式虽然优美,但在开发中会遇到一些难处理的地方.我也不例外,下面是自己在实际开发中总结出来的几条经验,希望跟大家分享,更希望得到大家的建议和更好的解 ...
- CodeFirst体验之且行且珍惜
CodeFirst作为一种新的开发理念和方式,EF Code-First相对于MVC中的DataFirst,ModelFirst确实开发效率确实高点,至少数据库建表这一块,直接用类映射到数据中,标记 ...
- centos7 开机自动连网
新安装好的CentOS7桌面版,默认的网络都是关闭的,在图形页面中,开启后,重启后网络又关闭了.下面配置开机自动连网. 工具/原料 CentOS7.2 方法/步骤 首先打开终端,用ifco ...
- Java集合遍历时删除
public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); l ...
- WIN10系统如何使用传统WIN7开始菜单
安装StartlsBack 默认按WIN键就可以回到WIN7的菜单了 右击WIN可以点击属性,详细设置菜单样式
- Android Device Monitor工具的使用
在最新的Android Studio3.x版本中,已经去掉了Android Device Monitor工具,但是不代表Android Device Monitor工具就不能用了,找到sdk的目录: ...
- iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing
ios 8 uitextfield keyboard not appearing //发现在iphone 6 and iPhone plus 上面键盘不出来.后来查了下原来要在模拟器里设置下 var ...
- LintCode: Restore IP Address
C++ string::substr(start_pos, length) vector::push_back(element) class Solution { public: vector< ...
- ZH奶酪:利用CSS将checkbox选项放大
在Hybrid App开发过程中,html中默认的checkbox选项在手机屏幕上显得比较小,app不能像web page那样放大缩小,所以要通过CSS将checkbox选项放大: 例如HTML代码: ...