C#:当按下鼠标左键/鼠标键时,如何获得鼠标的坐标?

时间:2010-01-15 00:39:55

标签: c# winforms hook mouse-hook

如果按下鼠标左键/鼠标键,我如何获得鼠标的坐标?

我使用的是低级鼠标钩,并且能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索位置。

我该怎么做?

6 个答案:

答案 0 :(得分:3)

为什么不直接捕获MouseDown事件,而使用MouseEventArgs.LocationMouseEventArgs获取点击的位置?

答案 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并设法获取坐标。

相关问题