【发布时间】:2012-10-04 09:06:15
【问题描述】:
在我的 c# 项目中,我试图拦截来自另一个程序的鼠标点击,但也只拦截来自某个 hwnd 的鼠标点击……我读过here,我可以使用 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;
}
这是可能出错的部分...我尝试了 2 件事:
CWPSTRUCT cwp = (CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT));
或者不安全的版本this is where I got it from:
CWPSTRUCT* cp = (CWPSTRUCT*)lParam;
使用第一个选项时,hwnd 部分总是为 0,而使用不安全的版本时,我什么也得不到……我真的不知道我在做什么错。任何帮助将不胜感激:)
谢谢
【问题讨论】:
标签: c# intptr mouse-hook