如何为 UI 之类的 "desktop" 安装全局鼠标钩子
how to Install global mouse Hook for certain UI like "desktop"
到目前为止的代码安装了一个钩子来检测鼠标 activity 但我想要的是过滤 activity 某些 UI 或 来检测点击发生的位置(在哪个 hwnd 上)正好是 'Desktop'
有办法吗?
这是我使用过的代码,来自微软网站
这里:How to set a Windows hook in Visual C# .NET
编辑:我发现他提供的代码不是全局的,所以对于全局钩子检查 link 在答案中,
首先关于钩子,我发现它不是全局的,我发现了开源的全局钩子 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
}
}
}
完成!
特别感谢 Micky Duncaand 和 AJKenny84
到目前为止的代码安装了一个钩子来检测鼠标 activity 但我想要的是过滤 activity 某些 UI 或 来检测点击发生的位置(在哪个 hwnd 上)正好是 'Desktop' 有办法吗?
这是我使用过的代码,来自微软网站 这里:How to set a Windows hook in Visual C# .NET
编辑:我发现他提供的代码不是全局的,所以对于全局钩子检查 link 在答案中,
首先关于钩子,我发现它不是全局的,我发现了开源的全局钩子 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
}
}
}
完成!
特别感谢 Micky Duncaand 和 AJKenny84