6

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

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

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

4

1 回答 1

8

每个单独的击键都会生成单独OnKeyDownOnKeyPress、 和OnKeyUp事件。所以你有三个选择:

  1. 跟踪当前按下的每个键。对于您收到的每个键,在事件中为其设置一个标志,并在OnKeyDown相应的事件中为它清除标志OnKeyUp。当您收到 的OnKeyDown事件时D,检查您是否已经标记了AFG等。and事件还会告诉您、OnKeyDown和键的状态。OnKeyUpCTRLALTSHIFT

  2. 使用 Win32 API或GetKeyboardState()函数。当您收到 的事件时,询问操作系统当前是否按下了、、、等。GetKeyState()GetAsyncKeyState()OnKeyDownDAFGCTRL

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

于 2012-11-15T02:40:46.503 回答