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

Dom*_*gri 6 delphi textbox keyboard-shortcuts onkeypress keyboard-events

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

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

我知道如何处理带有修饰键的快捷键,例如CTRL+ DCTRL+ ALT+ DALT+ D,但是如何检测非修饰键按键组合?

Rem*_*eau 8

每个单独的按键产生独立的OnKeyDown,OnKeyPressOnKeyUp事件.所以你有三个选择:

  1. 跟踪当前按下的每个键.对于您收到的每个键,在OnKeyDown事件中为它设置一个标志,并在相应的事件中清除它的标志OnKeyUp.当你得到一个OnKeyDown事件D,请检查您是否已经标记A,F,G,等OnKeyDownOnKeyUp事件也将告诉你的状态CTRL,ALTSHIFT键.

  2. 使用Win32 API GetKeyboardState(),GetKeyState()GetAsyncKeyState()功能.当你得到一个OnKeyDown事件D,询问OS如果A,F,G,CTRL,等目前在低水平上.

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