我在Delphi中遇到以下问题(但可以将其视为一般的编程问题)。

我想以某种方式处理多个非修饰键组合的按键事件,例如A + D或D + F或D + F + G之类的快捷键。

我知道如何使用修饰键来处理快捷键,例如CTRL + D或CTRL + ALT + D或ALT + D,但是如何检测非修饰键组合?

最佳答案

每个单独的击键都会生成单独的OnKeyDownOnKeyPressOnKeyUp事件。因此,您有三个选择:

  • 跟踪当前按住的每个键。对于收到的每个键,请在OnKeyDown事件中为其设置一个标志,并在相应的OnKeyUp事件中为其清除该标志。当您获得D的OnKeyDown事件时,请检查是否已标记A,F,G等。OnKeyDownOnKeyUp事件还将告诉您CTRL,ALT和SHIFT键的状态。
  • 使用Win32 API的GetKeyboardState()GetKeyState()GetAsyncKeyState()函数。当您收到D的OnKeyDown事件时,请询问操作系统当前是否按住A,F,G,CTRL等。
  • 对于某些序列,您可以使用RegisterHotKey()并让操作系统为您跟踪 key 。当检测到注册序列时,您将收到WM_HOTKEY消息。
  • 关于delphi - 如何检测非修饰键组合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13390571/

    10-09 21:25