2015-07-13 38 views
0

該代碼到目前爲止安裝鉤以檢測鼠標活動,但我想要的是要篩選某些用戶界面的活動來檢測點擊的位置發生(其中hwnd)正好'桌面' 有沒有辦法?如何安裝全局鼠標掛鉤爲某些用戶界面,如「桌面」

這是我所使用的代碼從微軟網站 這裏:How to set a Windows hook in Visual C# .NET

編輯:我發現,只要他的代碼是不是全球化,所以在回答的答案,,

全局鉤子檢查鏈接
+0

你幾乎要知道HWND第一則全局回調過程中做你自己的過濾。使用'GetDesktopWindow()'提前獲得桌面的HWND – MickyD

+0

謝謝@Micky您的回覆我已經考慮過使用'GetDesktioWindow()'獲取HWND,但是**在哪裏或者如何在全局回調期間過濾它? ** 「首先我試圖使用'WndProc()',但我發現它只接收傳遞給我使用的HWND的消息,而與桌面無關」 –

+0

不用擔心,根據示例安裝WH_MOUSE和HWND將會MOUSEHOOKSTRUCT.hwnd''通過你的'MouseHook()'回調的LPARAM – MickyD

回答

0

首先對鉤,我發現,這不是全局,我發現開源全局鉤子Here所以只要鼠標點擊發生的事件會觸發我在那裏運行檢查簡單的回調代碼,如果在桌面上的主動控制

[DllImport("user32.dll")] 
static extern int GetForegroundWindow(); 

[DllImport("user32.dll")] 
static extern int GetClassName(int hWnd, StringBuilder lpClassName, int nMaxCount); 

public void GetActiveWindow() { 
const int maxChars = 256; 
int handle = 0; 
StringBuilder className = new StringBuilder(maxChars); 

handle = GetForegroundWindow(); 

if (GetClassName(handle, className, maxChars) > 0) { 
    string cName = className.ToString(); 
    if (cName == "Progman" || cName == "WorkerW") { 
     // desktop is active 
    } else { 
     // desktop is not active 
    } 
} 

}

DONE

特別感謝米奇Duncaand和AJKenny84