如何检测非修饰键按键组合?

时间:2012-11-15 02:10:12

标签: delphi textbox keyboard-shortcuts keyboard-events onkeypress

我在Delphi中遇到以下问题(但它可能被视为一般编程问题)。

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

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

1 个答案:

答案 0 :(得分:8)

每次单独击键都会生成单独的OnKeyDownOnKeyPressOnKeyUp事件。所以你有三个选择:

  1. 跟踪当前按下的每个键。对于您收到的每个密钥,请在OnKeyDown事件中为其设置一个标记,并在相应的OnKeyUp事件中清除该标记。当您获得 D OnKeyDown事件时,请检查您是否已标记 A F G 等等。OnKeyDownOnKeyUp事件还会告诉您 CTRL ALT SHIFT的状态 keys。

  2. 使用Win32 API GetKeyboardState()GetKeyState()GetAsyncKeyState()函数。当您获得 D OnKeyDown事件时,请询问操作系统 A F G CTRL 等目前被暂停。

  3. 对于某些序列,您可以使用RegisterHotKey()并让操作系统为您跟踪密钥。检测到已注册的序列时,您将收到WM_HOTKEY消息。