如果按下鼠标左键/鼠标键,我如何获得鼠标的坐标?
我使用的是低级鼠标钩,并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索位置。
我该怎么做?
答案 0 :(得分:3)
为什么不直接捕获MouseDown事件,而使用MouseEventArgs.Location
从MouseEventArgs获取点击的位置?
答案 1 :(得分:0)
在WM_LBUTTONDOWN上调用GetMessagePos()以获得所需内容。但我怀疑它是否适用于低级别的鼠标。它意味着在你的消息泵或窗口过程中使用。
“GetMessagePos函数检索GetMessage函数检索的最后一条消息的光标位置。”
你确定需要一个钩子吗?
答案 2 :(得分:0)
在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。
答案 3 :(得分:0)
MouseHook过程的wParam参数将包含消息标识符WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN,WM_RBUTTONUP等。从中可以确定按钮状态在当前坐标处的位置。
答案 4 :(得分:0)
http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx - 我发现了这条迷人的信息。遗憾的是,Visual Studio 2008不接受已经预编译的DLL,我无法在我的机器上安装Visual Basic 6来尝试重新编译它。
答案 5 :(得分:0)
http://www.codeproject.com/KB/system/globalsystemhook.aspx - 这解决了我的问题。使用演示项目中的DLL并设法获取坐标。