6

私は Delphi で次の問題を抱えています (ただし、一般的なプログラミングの質問として受け取られる可能性があります)。

A+DまたはD+FまたはD+ F+のようなショートカットなど、複数の非修飾キーの組み合わせのキープレスイベントを何らかの方法で処理したいと思いますG

CTRL+DまたはCTRL+ ALT+DまたはALT+などの修飾キーを使用してショートカットを処理する方法は知ってDいますが、非修飾キーの組み合わせを検出するにはどうすればよいですか?

4

1 に答える 1

8

個々のキーストロークは、個別の、、、およびイベントを生成OnKeyDownOnKeyPressますOnKeyUp。したがって、3つの選択肢があります。

  1. 現在押されている各キーを追跡します。受け取ったキーごとに、イベントでそのキーのフラグを設定OnKeyDownし、対応するイベントでそのフラグをクリアしOnKeyUpます。OnKeyDownのイベントを取得したら、、、、などのフラグDがすでに設定されているかどうかを確認します。およびイベントは、、、、およびキーの状態も通知します。AFGOnKeyDownOnKeyUpCTRLALTSHIFT

  2. Win32APIまたは関数GetKeyboardState()を使用します。のイベントを取得したら、、、、、などが現在保留されているかどうかをOSに確認します。GetKeyState()GetAsyncKeyState()OnKeyDownDAFGCTRL

  3. 一部のシーケンスではRegisterHotKey()、OSにキーを追跡させるために使用する場合があります。登録されたシーケンスが検出されると、WM_HOTKEYメッセージが表示されます。

于 2012-11-15T02:40:46.503 に答える