我怎么知道是否使用RawInput按下了班次?

时间:2010-08-19 02:52:47

标签: windows delphi winapi

我正在使用RawInput来处理击键。我发现很难确定换档是否与钥匙一起按下。

来自RawInputStructure - > RawKeyboard,我可以检索被按下的键,但如果同时按下键,我不知道如何处理。

RI.Data.keyboard.VKey(获取密钥代码)

我正在尝试为每个用户/键盘分隔Shift,因为当一个用户/键盘移动所有用户/键盘时,与Capslock相同。同时打字变得非常混乱。

如何知道换班是否与另一把钥匙一起按下?我是在正确的结构中寻找它还是应该在其他地方寻找?

2 个答案:

答案 0 :(得分:6)

没有两个键被“同时按下”的事情。一个下降,然后另一个。你应该分别得到每个人的通知。按下或释放shift键时,在程序中设置或清除标志以记住其当前状态。

这实际上是操作系统已经为普通键盘输入做了什么。它保留一个键状态映射并使用每个键盘消息进行更新。使用GetKeyState检查要处理的最新消息的密钥状态,或在调用该函数时使用GetAsyncKeyState检查密钥的状态。 (如果键盘状态已更改但您尚未处理这些键盘消息,则两者可能会有所不同,例如,如果用户键入的速度比程序可以处理的速度快,则可能会有所不同。)

答案 1 :(得分:0)

您可以尝试以下方法:

  1. 当在原始输入中按下Shift键时,该设备的存储器中的存储状态为true
  2. 按下字符键时,请检查您在第1点记录的换档状态
  3. 如果shift仍然向下,那么您按的字符也完全具有shift键
  4. 在按下Shift键后,将您该设备的变速状态记忆重新重置为false