支持多达11个鼠标按钮?

时间:2016-04-06 22:22:26

标签: windows winapi mouse

我正在编写一个小概念,用于检测Windows上鼠标和键盘的额外输入,是否可以,如何检测Windows API中大量按钮的输入?根据我的阅读,只有5个按钮的支持,但许多鼠标有更多的按钮,我的问题甚至可以使用Windows API,是否可以在Windows的限制范围内?

2 个答案:

答案 0 :(得分:2)

您可以使用Raw Input API直接从鼠标/键盘驱动程序接收WM_INPUT消息。 5个标准鼠标按钮(左,中,右,x1和x2)有结构字段。除标准按钮外,其他按钮由特定于供应商的数据处理,您必须根据需要对其进行编码。 API可以让您访问原始值,但您必须参考供应商驱动程序文档以了解如何解释它们。有时额外的按钮实际上被报告为键盘输入而不是鼠标输入。

或者,尝试使用DirectInput APIDirectInput devices互动,以接收Mouse DataKeyboard Data

或者,您可以使用XInput API,它是DirectInput的后继者。但是,XInput比DirectInput更受限制,因为它主要用于与Xbox 360控制器交互,而DirectInput旨在与任何控制器交互。有关详细信息,请参阅XInput and DirectInput

答案 1 :(得分:0)

非常简单:使用GetKeyState

SHORT WINAPI GetKeyState(
  _In_ int nVirtKey
);

逻辑是下一个:

  1. 要求用户不要按按钮
  2. 为所有按钮0-255
  3. 循环GetKeyState
  4. 按下按下的按钮状态(即使没有按下也可以按下某些虚拟按键,不知道为什么)
  5. 现在启动密钥监控线程以获取其余密钥代码并将其保存到任何结构(循环之间的暂停时间为25毫秒就足够了)
  6. 要求用户按下按钮
  7. 从按键监视器阵列,您将看到用户按下的任何按钮
  8. 直接输入和所有其他输入更适用于其他用户输入设备。对于键盘和鼠标 - GetKeyState最好。