按下鼠标左/右键时如何获取鼠标的坐标?
我正在使用低级鼠标钩子并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置。
我怎样才能做到这一点?
按下鼠标左/右键时如何获取鼠标的坐标?
我正在使用低级鼠标钩子并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置。
我怎样才能做到这一点?
为什么不直接捕获MouseDown 事件,并从MouseEventArgs中使用 获取单击的位置MouseEventArgs.Location
?
在 WM_LBUTTONDOWN 上调用 GetMessagePos() 以获得您想要的。但我怀疑它是否能在低级鼠标钩中工作。它旨在用于您的消息泵或窗口过程中。
“GetMessagePos 函数检索 GetMessage 函数检索到的最后一条消息的光标位置。”
你确定你需要一个钩子吗?
在您的 MouseHook 方法中:
public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//Marshall the data from the callback.
MouseHookStruct MyMouseHookStruct =
(MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
if (nCode >= 0)
{
int xcoord = MyMouseHookStruct.pt.x;
int ycoord = MyMouseHookStruct.pt.y;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
从这里。
MouseHook 过程的 wParam 参数将包含消息标识符 WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP 等。从中可以确定当前坐标处的按钮状态。
http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx - 我发现了这个迷人的小信息。遗憾的是,Visual Studio 2008 不接受已预编译的 dll,而且我无法在我的机器上安装 Visual Basic 6 来尝试重新编译它。
http://www.codeproject.com/KB/system/globalsystemhook.aspx - 这解决了我的问题。使用演示项目中的 DLL 并设法获取坐标。