2010-01-15 60 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

相關問題