1

我一直无法找到一种方法来检查程序的用户是否正在访问特定的网站。如果我想打开一个弹出框,告诉我当前在哪个网站上,最好的方法是什么?

我一直在思考各种方法,但我永远无法得出一个明确的结论。想过通过浏览进程或检查窗口来检查打开了哪个浏览器,但我该如何找到它?即使我没有找到确切的网站地址而只是名称,也可以。

例如,现在打开的窗口显示“检查访问了哪个网站 - 堆栈溢出 - Mozilla Firefox”,有没有办法从编程的角度来获得它?就像以某种方式检查并阅读当前打开的窗口。

谢谢你的帮助。

4

2 回答 2

2

要获取活动窗口的标题,请使用以下代码:

HWND hwnd = GetForegroundWindow();
CString title;
LPTSTR str = title.GetBufferSetLength(GetWindowTextLength(hwnd));
GetWindowText(hwnd, str, title.GetLength() + 1);
if (title.IsEmpty())title = _T("User Desktop");
...

活动窗口将在“标题”下。

要获取活动运行的应用程序,请使用以下代码:

    DWORD pid;
    GetWindowThreadProcessId(GetForegroundWindow(), &pid);
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
if (hProcess != NULL)
{
    TCHAR path[MAX_PATH] = { 0 };
    TCHAR filename[MAX_PATH] = { 0 };
    GetProcessImageFileName(hProcess, path, MAX_PATH);
    _wsplitpath(path, NULL, NULL, filename, NULL);
    CloseHandle(hProcess);
...

文件名将保存活动的应用程序

于 2015-05-27T10:29:10.910 回答
1

从 Web 浏览器获取当前站点的确切 URL 将特定于每个浏览器。在大多数情况下,最简单的方法是创建一个浏览器插件或扩展程序,您的应用程序可以与之通信以检索所需的信息。这是否是一个可行的选择将取决于您正在尝试做的事情以及用户是否愿意安装插件。很多应用程序(例如雅虎通)曾经这样做将信使功能集成到浏览器中,但我不知道他们是否仍然这样做。

由于每个浏览器都不同,即使只检索标题也会有问题。在某些情况下,您可以使用GetWindowText来检索标题栏标题。不幸的是,Internet Explorer 和 Chrome 等浏览器使用选项卡或自定义嵌入式控件向用户呈现该信息,因此GetWindowText在这种情况下使用有限。

但是,为了使用GetWindowText检索标题栏中的文本,您必须获取特定 Web 浏览器窗口的句柄。您可以执行此操作EnumWindows并使用拥有窗口或窗口类(不是 C++ 类)的进程 ID等信息来确定它是否是浏览器窗口。您还需要处理可能有多个浏览器窗口打开的可能性。在这种情况下,您可以使用标题列表提示用户并让他们选择一个,这取决于您实际尝试完成的内容。

于 2013-06-22T20:17:26.400 回答