如何使用Win32 / User32库检查当前的鼠标按钮状态?

Ale*_*lex 3 c# c++ mouse winapi

我知道如何使用User32 SendInput方法来激发点击,而我需要的是类似的User32方法,但是要获得当前的鼠标按钮状态。

类似于:

public static extern bool GetCursorPos(ref System.Drawing.Point lpPoint);

函数GetCursorPos给我当前的光标位置。我需要的是左按钮状态(是否单击)。有这样的功能吗?

Nec*_*lis 5

使用GetAsyncKeyState,引用 MSDN:

GetAsyncKeyState 函数适用于鼠标按钮。但是,它检查物理鼠标按钮的状态,而不是物理按钮映射到的逻辑鼠标按钮。例如,调用 GetAsyncKeyState(VK_LBUTTON) 始终返回鼠标左键的状态,无论它是映射到左逻辑鼠标还是右逻辑鼠标。您可以通过调用 GetSystemMetrics(SM_SWAPBUTTON) 来确定系统当前物理鼠标按钮到逻辑鼠标按钮的映射。


Ale*_*lex 5

有一个称为GetAsyncKeyState的方法。方法签名如下所示:

[DllImport("user32.dll")] public static extern short GetAsyncKeyState(UInt16 virtualKeyCode);

然后,您可以简单地通过传递鼠标左键代码(VK_LBUTTON = 0x01)来调用它,然后退出。

直接从MSDN获得更多信息。

  • “然后,您只需通过传递鼠标左键代码(VK_LBUTTON = 0x01)来调用它就可以了。” 这确实是误导。您必须分解并分析返回的short以创建状态数据。这使得该问题的答案有些不完整。 (2认同)