我在Delphi中遇到以下问题(但可以将其视为一般的编程问题)。
我想以某种方式处理多个非修饰键组合的按键事件,例如A + D或D + F或D + F + G之类的快捷键。
我知道如何使用修饰键来处理快捷键,例如CTRL + D或CTRL + ALT + D或ALT + D,但是如何检测非修饰键组合?
最佳答案
每个单独的击键都会生成单独的OnKeyDown
,OnKeyPress
和OnKeyUp
事件。因此,您有三个选择:
OnKeyDown
事件中为其设置一个标志,并在相应的OnKeyUp
事件中为其清除该标志。当您获得D的OnKeyDown
事件时,请检查是否已标记A,F,G等。OnKeyDown
和OnKeyUp
事件还将告诉您CTRL,ALT和SHIFT键的状态。 GetKeyboardState()
,GetKeyState()
或GetAsyncKeyState()
函数。当您收到D的OnKeyDown
事件时,请询问操作系统当前是否按住A,F,G,CTRL等。 RegisterHotKey()
并让操作系统为您跟踪 key 。当检测到注册序列时,您将收到WM_HOTKEY
消息。 关于delphi - 如何检测非修饰键组合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13390571/