在我的 c# 项目中,我试图拦截来自另一个程序的鼠标点击,但也只有来自某个 hwnd 的那些……我在这里读过,我可以使用 lParam 过滤我的消息,但我没有成功把它转换成我实际上可以让 Hwnd 回来的东西。
这就是我设置全局鼠标钩子的方式:
SetWindowsHookEx(WH_MOUSE_LL, s_MouseDelegate, IntPtr.Zero, 0);
然后我在这个函数中捕获消息:
private static int MouseHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
mouseDown = true;
mouseUp = false;
break;
case WM_LBUTTONUP:
mouseUp = true;
mouseDown = false;
break;
}
}
return CallNextHookEx(s_MouseHookHandle, nCode, wParam, lParam);
}
然后我像这样制作了 CWPSTRUCT:
[StructLayout(LayoutKind.Sequential)]
public struct CWPSTRUCT
{
public IntPtr lparam;
public IntPtr wparam;
public int message;
public IntPtr hwnd;
}
这是它可能出错的部分......我尝试了两件事:
CWPSTRUCT cwp = (CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT));
或者不安全的版本,这是我从中得到的:
CWPSTRUCT* cp = (CWPSTRUCT*)lParam;
使用第一个选项时,hwnd 部分总是得到 0,而使用不安全版本时,我什么也得不到……我真的不知道我在这里做错了什么。任何帮助,将不胜感激 :)
谢谢