当按下左/右鼠标按钮时,我如何获得鼠标的坐标?C#:当鼠标左键/右键被按下时,我如何获得鼠标的坐标?
我正在使用低级别的鼠标钩子,并且能够获取我的光标的当前位置,但我希望能够在任何鼠标按钮被按下时检索位置。
我该怎么做?
当按下左/右鼠标按钮时,我如何获得鼠标的坐标?C#:当鼠标左键/右键被按下时,我如何获得鼠标的坐标?
我正在使用低级别的鼠标钩子,并且能够获取我的光标的当前位置,但我希望能够在任何鼠标按钮被按下时检索位置。
我该怎么做?
http://www.codeproject.com/KB/system/globalsystemhook.aspx - 这解决了我的问题。使用演示项目中的DLL并设法获取坐标。
在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);
}
从here。
您的MouseHook过程的wParam参数将包含消息标识符WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN,WM_RBUTTONUP等。由此您可以确定按钮状态在当前坐标处。
你为什么不只是捕捉MouseDown事件,并从MouseEventArgs,获得的位置点击使用MouseEventArgs.Location
?
因为这只会在应用程序有焦点时才起作用。 – Zolomon 2010-01-15 09:03:29
OP的背景并不清楚。如果它在Forms应用程序的上下文中,那么Ngu的解决方案是最简单的。除此之外,它根本无法工作:) – 2010-01-15 15:37:07
http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx - 我发现这个小小的迷人信息。令人遗憾的是Visual Studio 2008不会接受已经预编译的dll,而且我无法在我的机器上安装Visual Basic 6来尝试重新编译它。
是的,我需要一个钩子。谢谢!将看看GetMessagePos()。 – Zolomon 2010-01-15 00:54:30
如果您需要低级别的挂钩,那么您不应该编写托管代码。让鼠标响应很重要 - 一只迟钝的鼠标会让一切变得更加困难。 – 2010-01-15 01:03:22
嗯,我不知道C++,所以我不能自己写一个DLL,它只是供个人使用。将鼠标按钮的坐标写入文件对性能的要求不是太高,我希望如此? – Zolomon 2010-01-15 01:06:34