当左/右鼠标键被按下时,我如何获取鼠标的坐标?
我正在使用低级别的鼠标钩子,并能够获取光标的当前位置,但我想在任何鼠标按钮被按下时检索位置。
我该怎么做?
当左/右鼠标键被按下时,我如何获取鼠标的坐标?
我正在使用低级别的鼠标钩子,并能够获取光标的当前位置,但我想在任何鼠标按钮被按下时检索位置。
我该怎么做?
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);
}
从这里。
在 WM_LBUTTONDOWN 上调用 GetMessagePos() 以获取所需内容。但我怀疑它是否能在低级鼠标钩子内正常工作。它应该在消息泵或窗口过程中使用。
"GetMessagePos 函数检索由 GetMessage 函数检索的最后一条消息的光标位置。"
您确定需要一个钩子吗?
你的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并成功获取到坐标。