2015-07-13 36 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