检查访问了哪个网站

时间:2013-06-22 20:03:59

标签: c++ url process web

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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);
...

filename将保存活动应用程序

答案 1 :(得分:0)

从Web浏览器获取当前站点的确切URL将特定于每个浏览器。在大多数情况下,最简单的方法是创建一个浏览器插件或扩展程序,您的应用程序可以与之通信以检索所需的信息。这是否是一个可行的选项将特定于您尝试做什么以及用户是否愿意安装该插件。许多应用程序(如Yahoo Messenger)过去常常将信使功能集成到浏览器中,但我不知道它们是否仍然存在。

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

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