C#:按下鼠标左/右键后,如何获取鼠标坐标?

C#:按下鼠标左/右键后,如何获取鼠标坐标?,c#,winforms,hook,mouse-hook,C#,Winforms,Hook,Mouse Hook,按下鼠标左/右键后,如何获取鼠标坐标 我正在使用一个低级鼠标挂钩,能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置 我该怎么做 在WM_LBUTTONDOWN上调用GetMessagePos()以获取所需内容。但我怀疑它是否能在低级别的鼠标套中工作。这意味着要在消息泵或窗口过程中使用 “GetMessagePos函数检索GetMessage函数检索到的最后一条消息的光标位置。” 您确定需要挂钩吗?在鼠标挂钩方法中: public static int MouseHookProc

按下鼠标左/右键后,如何获取鼠标坐标

我正在使用一个低级鼠标挂钩,能够获取光标的当前位置,但我希望能够在按下任何鼠标按钮时检索该位置

我该怎么做

在WM_LBUTTONDOWN上调用GetMessagePos()以获取所需内容。但我怀疑它是否能在低级别的鼠标套中工作。这意味着要在消息泵或窗口过程中使用

“GetMessagePos函数检索GetMessage函数检索到的最后一条消息的光标位置。”


您确定需要挂钩吗?

在鼠标挂钩方法中:

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); 
}

从。

鼠标指针过程的wParam参数将包含消息标识符WM_lbuttonown、WM_LBUTTONUP、WM_rbuttonown、WM_RBUTTONUP等。。由此,您可以确定当前坐标下的按钮状态


为什么不直接捕获事件,然后从中,使用
MouseEventArgs.Location

-我发现了这条迷人的信息。遗憾的是,VisualStudio2008不接受已预编译的dll,并且我无法让Visual Basic 6安装在我的计算机上,以尝试重新编译它

-这解决了我的问题。使用演示项目中的DLL并设法获得坐标。

是的,这是我正在使用的挂钩。不过,当按下任何鼠标按钮时,你的回答都不会给我坐标。它只会给我鼠标的当前坐标,而你忘记了返回语句。谢谢你!那么,你基本上可以从这里开始了吗?不,我仍然无法通过GetMessagePos()从user32.dll检索坐标,不知道如何在过程中使用它。如蒙帮助,将不胜感激。:)是的,我需要一个钩子。非常感谢。将查看GetMessagePos()。如果需要低级挂钩,则不应编写托管代码。鼠标反应很重要——一只迟钝的老鼠让一切变得困难。我不知道C++,所以我不能自己编写一个DLL,它只是个人使用的。我希望,将鼠标按钮点击的坐标写入一个文件对性能要求不是太高吗?个人使用?你想干什么就干什么。我想你会注意到懒惰——如果它太过烦躁,你可以试试你的手C++。一个基本的dll其实并不难——特别是如果你使用VisualStudio的话。之所以迟钝不是因为点击,而是因为每个鼠标事件(主要是鼠标移动)都必须从内核所在的非托管代码,到调用钩子函数的托管代码。OP的上下文不清楚。如果是在表单应用程序的上下文中,那么Ngu的解决方案是迄今为止最简单的。在这种情况下,它根本不起作用:)