【发布时间】:2011-03-07 14:38:56
【问题描述】:
我知道如何使用 User32 SendInput 方法来刺激点击,我需要的是一个类似的 User32 方法,但要获取当前的鼠标按钮状态。
类似于:
public static extern bool GetCursorPos(ref System.Drawing.Point lpPoint);
函数 GetCursorPos 为我提供当前光标位置。我需要的是左键状态(如果它被点击了)。有这样的功能吗?
【问题讨论】:
我知道如何使用 User32 SendInput 方法来刺激点击,我需要的是一个类似的 User32 方法,但要获取当前的鼠标按钮状态。
类似于:
public static extern bool GetCursorPos(ref System.Drawing.Point lpPoint);
函数 GetCursorPos 为我提供当前光标位置。我需要的是左键状态(如果它被点击了)。有这样的功能吗?
【问题讨论】:
使用GetAsyncKeyState,引用MSDN:
GetAsyncKeyState 函数有效 用鼠标按钮。但是,它检查 关于物理鼠标的状态 按钮,不在逻辑鼠标上 物理按钮的按钮 映射到。例如,调用 GetAsyncKeyState(VK_LBUTTON) 总是 返回左侧物理的状态 鼠标按钮,不管它是否 映射到左或右逻辑 鼠标按钮。您可以确定 系统的当前物理映射 鼠标按钮到逻辑鼠标按钮 通过调用 GetSystemMetrics(SM_SWAPBUTTON)。
【讨论】:
有一个方法叫做 GetAsyncKeyState。方法签名如下所示:
[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(UInt16 virtualKeyCode);
然后您只需传递鼠标左键代码 (VK_LBUTTON = 0x01) 即可调用它,然后您就可以开始了。
更多信息直接来自MSDN。
【讨论】: