2013-06-22 155 views
1

我一直無法找到一種方法來檢查程序的用戶是否正在訪問特定的網站。如果我想打開一個彈出框告訴我當前正在使用哪個網站,那麼最好的方法是什麼?檢查訪問哪個網站

我一直在想各種各樣的方法,但我永遠不會得出明確的結論。考慮通過瀏覽進程或檢查窗口來檢查哪個瀏覽器是打開的,但是如何找到它?即使我沒有找到確切的網站地址,但只是名稱,會沒事的。

例如,現在窗口打開顯示'檢查訪問哪個網站 - 堆棧溢出 - Mozilla Firefox',有沒有一種方法可以從編程的角度來獲取?像某種方式檢查並閱讀目前打開的窗口。

感謝您的任何幫助。

+0

我懷疑有一個真正的答案。用戶可能安裝了多個Web瀏覽器,因此基於窗口的搜索可能會失敗。單個網頁可能(通常會)具有來自多個服務器的部分,因此跟蹤URL或IP地址也可能失敗。 –

+0

那麼有這樣的程序,所以我只是想知道它是如何可能的。有沒有辦法訪問你從taskmgr看到的正在運行的應用程序列表?如果是這樣,您可以搜索,因爲如果它是瀏覽器,它會在應用程序名稱中顯示瀏覽器名稱,例如:「Google - Mozilla」或「Google - Chrome」。 – JimmySmithJR

+0

我相信Windows任務管理器中顯示的應用程序使用'EnumWindows'來枚舉頂層窗口。如果找到半打(如此)的主瀏覽器的實例就足夠了,那可能會工作得很好。 –

回答

0

從網絡瀏覽器獲取當前網站的確切網址將會針對每個瀏覽器。在大多數情況下,最簡單的方法是創建一個瀏覽器插件或擴展程序,以便應用程序可以與之通信以檢索所需的信息。這是否是一種可行的選擇將會針對你正在嘗試做什麼以及用戶是否願意安裝插件。很多應用程序(例如Yahoo Messenger)曾經這樣做過將Messenger功能集成到瀏覽器中,但我不知道他們是否仍然這樣做。

即使只是檢索標題將是有問題的,因爲每個瀏覽器是不同的。在某些情況下,您可以使用GetWindowText來檢索標題欄標題。不幸的是,瀏覽器如Internet Explorer和Chrome使用標籤或自定義嵌入式控件向用戶展示該信息,因此在這種情況下使用GetWindowText的用途有限。

爲了使用GetWindowText來檢索標題欄中的文本,您將不得不獲取特定Web瀏覽器窗口的句柄。你可以用EnumWindows來做到這一點,並使用process ID這個擁有窗口的信息或window class(不是C++類)來確定它是否是瀏覽器窗口。您還需要處理可能會有超過自己的瀏覽器窗口打開。在這種情況下,您可以提示用戶列出標題並讓他們選擇一個,這取決於您實際嘗試完成的內容。

+0

是否沒有辦法獲得當前選定的窗口?就像,我正在堆棧流,甚至我有Chrome開放。 – JimmySmithJR

+0

當使用'EnumWindows'時,窗口按z順序枚舉,所以你找到的第一個窗口將是最上面的瀏覽器窗口,最後一個窗口將是最下面的窗口。 –

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

文件名將保持活動的應用程序

+0

我測試了這個頁面 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.110%29.aspx(例如)出現在我的程序日誌中: 「活動窗口」EnumWindows函數(Windows) - Google Chrome'「,我想知道如何捕獲頁面的地址。 –