當按下左/右鼠標按鈕時,我如何獲得鼠標的座標?C#:當鼠標左鍵/右鍵被按下時,我如何獲得鼠標的座標?
我正在使用低級別的鼠標鉤子,並且能夠獲取我的光標的當前位置,但我希望能夠在任何鼠標按鈕被按下時檢索位置。
我該怎麼做?
當按下左/右鼠標按鈕時,我如何獲得鼠標的座標?C#:當鼠標左鍵/右鍵被按下時,我如何獲得鼠標的座標?
我正在使用低級別的鼠標鉤子,並且能夠獲取我的光標的當前位置,但我希望能夠在任何鼠標按鈕被按下時檢索位置。
我該怎麼做?
http://www.codeproject.com/KB/system/globalsystemhook.aspx - 這解決了我的問題。使用演示項目中的DLL並設法獲取座標。
在WM_LBUTTONDOWN上調用GetMessagePos()來獲得你想要的。但我懷疑它可以在低級別的鼠標中使用。它意味着在你的消息泵或窗口過程中使用。
「GetMessagePos函數檢索由GetMessage函數檢索的最後一條消息的光標位置。」
你確定你需要一個鉤子嗎?
在你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。
您的MouseHook過程的wParam參數將包含消息標識符WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN,WM_RBUTTONUP等。由此您可以確定按鈕狀態在當前座標處。
你爲什麼不只是捕捉MouseDown事件,並從MouseEventArgs,獲得的位置點擊使用MouseEventArgs.Location
?
因爲這隻會在應用程序有焦點時才起作用。 – Zolomon 2010-01-15 09:03:29
OP的背景並不清楚。如果它在Forms應用程序的上下文中,那麼Ngu的解決方案是最簡單的。除此之外,它根本無法工作:) – 2010-01-15 15:37:07
http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx - 我發現這個小小的迷人信息。令人遺憾的是Visual Studio 2008不會接受已經預編譯的dll,而且我無法在我的機器上安裝Visual Basic 6來嘗試重新編譯它。
是的,我需要一個鉤子。謝謝!將看看GetMessagePos()。 – Zolomon 2010-01-15 00:54:30
如果您需要低級別的掛鉤,那麼您不應該編寫託管代碼。讓鼠標響應很重要 - 一隻遲鈍的鼠標會讓一切變得更加困難。 – 2010-01-15 01:03:22
嗯,我不知道C++,所以我不能自己寫一個DLL,它只是供個人使用。將鼠標按鈕的座標寫入文件對性能的要求不是太高,我希望如此? – Zolomon 2010-01-15 01:06:34