2010-01-15 97 views

回答

0

在WM_LBUTTONDOWN上调用GetMessagePos()来获得你想要的。但我怀疑它可以在低级别的鼠标中使用。它意味着在你的消息泵或窗口过程中使用。

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

你确定你需要一个钩子吗?

+0

是的,我需要一个钩子。谢谢!将看看GetMessagePos()。 – Zolomon 2010-01-15 00:54:30

+0

如果您需要低级别的挂钩,那么您不应该编写托管代码。让鼠标响应很重要 - 一只迟钝的鼠标会让一切变得更加困难。 – 2010-01-15 01:03:22

+0

嗯,我不知道C++,所以我不能自己写一个DLL,它只是供个人使用。将鼠标按钮的坐标写入文件对性能的要求不是太高,我希望如此? – Zolomon 2010-01-15 01:06:34

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

+0

是的,这是我使用的钩子。虽然,当你按下任何鼠标按钮时,你的答案不会给我坐标。它只会给我鼠标的当前坐标,并且你忘记了返回语句。虽然谢谢! – Zolomon 2010-01-15 00:52:19

+0

那么,你几乎可以从这里拿走它? – 2010-01-15 00:55:37

+0

不,我仍然没有设法从user32.dll中检索GetMessagePos()的坐标,不知道如何在程序中使用它。帮助将不胜感激。 :) – Zolomon 2010-01-15 01:11:34

3

你为什么不只是捕捉MouseDown事件,并从MouseEventArgs,获得的位置点击使用MouseEventArgs.Location

+0

因为这只会在应用程序有焦点时才起作用。 – Zolomon 2010-01-15 09:03:29

+0

OP的背景并不清楚。如果它在Forms应用程序的上下文中,那么Ngu的解决方案是最简单的。除此之外,它根本无法工作:) – 2010-01-15 15:37:07