我在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键的状态.>使用Win32 API GetKeyboardState(),GetKeyState()或GetAsyncKeyState()函数.当您获得D的OnKeyDown事件时,询问操作系统当前是否按下A,G,CTRL等.>对于某些序列,您可以使用RegisterHotKey()并让操作系统为您跟踪密钥.检测到已注册的序列时,您将收到WM_HOTKEY消息.