代码都是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的更多相关文章

  1. 如何获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

  2. JS获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

  3. 如何获取浏览器URL中查询字符串的参数?

    如何获取浏览器URL中查询字符串的参数? 想要知道怎样解决这个问题,首先我们先认识一下Location对象. Location对象包含了当前页面与位置(url)相关的信息 URL示例:http://w ...

  4. js获取浏览器上一访问页面URL地址,document.referrer方法

    如题,可用document.referrer方法获取上一页面的url 但是也有不可使用的情况 直接在浏览器地址栏中输入地址: 使用location.reload()刷新(location.href或者 ...

  5. 如何用js获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

  6. 三个获取浏览器URL中参数值的方法

    这三个是一般的获取浏览器传的参数值的方法,之前有用unescape()解码的方法,但是遇到汉字会产生乱码,所以用decodeURI(); 方法一: function getQueryString(na ...

  7. 获取浏览器url参数

    //获取浏览器url参数 var methods ={ getQueryString: function (name) { var reg = new RegExp('(^|&)' + nam ...

  8. 获取浏览器中url的参数

    例如: 浏览器的地址是:http://localhost:8080/src/views/moneyDetail?id=10 vue 获取浏览器的参数 获取id的参数:this.$route.query ...

  9. 获取浏览器信息 c#

    Request.Browser.MajorVersion.ToString();//获取客户端浏览器的版本号 Request.Browser.Version.ToString();//获取客户端浏览器 ...

随机推荐

  1. ASP.NET MVC:无法向会话状态服务器发出会话状态请求

    ylbtech-Error-ASP.NET MVC: 无法向会话状态服务器发出会话状态请求 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Service (ASP.NET ...

  2. QT TCP网络编程

    首先介绍一下TCP:(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.相比而言UDP,就是开放式.无连接.不可靠的传输层 ...

  3. 《UNIX环境高级编程》笔记--环境变量

    ISO C定义了一个函数getenv,可以用其取环境变量值. #include <stdlib.h> char* getenv(const char* name); //返回与name关联 ...

  4. 构建-4 dependencies 依赖管理

    官方文档 Add build dependencies The Gradle build system in Android Studio makes it easy to include exter ...

  5. Python Numpy模块函数np.c_和np.r_

    np.r_:是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_:是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的 ...

  6. PLSQL Developer连接远程Oracle数据库

    要连接远程数据库,传统的一定可行的方法是在本地装一个oracle.然后使用"Network Configuration Assistant"配置.之后用PL/SQL Dev连接.由 ...

  7. [转]xshell实现端口转发

    原文: https://www.cnblogs.com/linxizhifeng/p/8657795.html https://blog.csdn.net/qq_34039315/article/de ...

  8. 深浅拷贝 python

    原文:http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 ...

  9. [Spring Boot] Use Component Scan to scan for Bean

    Component Scan is important concept when we want to create Bean. Currently we know what, for the cla ...

  10. CodeForces 569B Inventory 货物编号

    原题: http://codeforces.com/contest/569/problem/B 题目: Inventory time limit per test1 second memory lim ...