【问题标题】:How to check current mouse button state using Win32/User32 library?如何使用 Win32/User32 库检查当前鼠标按钮状态?
【发布时间】:2011-03-07 14:38:56
【问题描述】:

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

类似于:

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

函数 GetCursorPos 为我提供当前光标位置。我需要的是左键状态(如果它被点击了)。有这样的功能吗?

【问题讨论】:

标签: c# c++ winapi mouse


【解决方案1】:

使用GetAsyncKeyState,引用MSDN:

GetAsyncKeyState 函数有效 用鼠标按钮。但是,它检查 关于物理鼠标的状态 按钮,不在逻辑鼠标上 物理按钮的按钮 映射到。例如,调用 GetAsyncKeyState(VK_LBUTTON) 总是 返回左侧物理的状态 鼠标按钮,不管它是否 映射到左或右逻辑 鼠标按钮。您可以确定 系统的当前物理映射 鼠标按钮到逻辑鼠标按钮 通过调用 GetSystemMetrics(SM_SWAPBUTTON)。

【讨论】:

    【解决方案2】:

    有一个方法叫做 GetAsyncKeyState。方法签名如下所示:

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

    然后您只需传递鼠标左键代码 (VK_LBUTTON = 0x01) 即可调用它,然后您就可以开始了。

    更多信息直接来自MSDN

    【讨论】:

    • "然后你只需通过鼠标左键代码 (VK_LBUTTON = 0x01) 调用它就可以了。"这真的很误导人。您必须分解并分析返回的空头以创建状态数据。这使得这个问题的答案有些不完整。
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多