我在Delphi中遇到以下问题(但它可能被视为一般编程问题)。
我想以某种方式处理多个非修饰键组合的按键事件,例如对于 A + D 或 D等快捷方式 + F 或 D + F + G 。
我知道如何使用修饰键来处理快捷键,例如 CTRL + D 或 CTRL + ALT + D 或 ALT + D ,但如何检测非修饰键按压组合?
答案 0 :(得分:8)
每次单独击键都会生成单独的OnKeyDown
,OnKeyPress
和OnKeyUp
事件。所以你有三个选择:
跟踪当前按下的每个键。对于您收到的每个密钥,请在OnKeyDown
事件中为其设置一个标记,并在相应的OnKeyUp
事件中清除该标记。当您获得 D 的OnKeyDown
事件时,请检查您是否已标记 A , F , G 等等。OnKeyDown
和OnKeyUp
事件还会告诉您 CTRL , ALT 和 SHIFT的状态 keys。
使用Win32 API GetKeyboardState()
,GetKeyState()
或GetAsyncKeyState()
函数。当您获得 D 的OnKeyDown
事件时,请询问操作系统 A , F , G , CTRL 等目前被暂停。
对于某些序列,您可以使用RegisterHotKey()
并让操作系统为您跟踪密钥。检测到已注册的序列时,您将收到WM_HOTKEY
消息。