6

在Delphi中我有以下問題(但它可能被視爲一般編程問題)。如何檢測非修飾鍵的按鍵組合?

我想以某種處理鍵按壓事件超過一個非修飾鍵組合,例如,用於像 + dd + 快捷方式˚Fd + F + G

我知道如何處理與修改鍵的快捷方式例如像CTRL + dCTRL + ALT + dALT + d,但我怎麼能檢測非 - 修改鍵按下組合?

+3

不,沒有特別的事件處理程序,您必須手動跟蹤鍵序列。 (順便說一下,請不要大聲呼喊) –

+1

請不要使用屬於您主題標籤的信息。這裏的標籤系統非常好,並且不需要幫助(特別是在SHOUTED時)。使用標籤 - 這就是他們的目的。 –

+2

對不起,我是新的! :) –

回答

8

每個單獨的按鍵生成單獨的OnKeyDown,OnKeyPressOnKeyUp事件。所以你有三個選擇:

  1. 跟蹤當前按下的每個鍵。對於您收到的每個密鑰,請在OnKeyDown事件中爲其設置一個標記,並在相應的OnKeyUp事件中清除標記。當您d得到OnKeyDown事件,請檢查您是否已經標記一個˚FOnKeyDownOnKeyUp事件也將告訴你CTRL的狀態,ALT ,和SHIFT鍵。

  2. 使用Win32 API GetKeyboardState(),GetKeyState()GetAsyncKeyState()函數。當您d得到OnKeyDown事件,詢問是否一個˚FCTRL等目前按住OS。

  3. 對於某些序列,您可以使用RegisterHotKey()並讓操作系統爲您跟蹤密鑰。當檢測到註冊序列時,您將收到一條WM_HOTKEY消息。

+0

非常感謝!我會證明你的方法,特別是對於第1點和第2點!謝謝! –

+0

如果有人在移動鼠標(想到一臺筆記本電腦的觸摸板 - 很多時候我在打字時偶然碰到它),方法#1可能會失敗。我不知道有什麼可能會失敗#2。 –

+0

@LorenPechtel:只是感興趣。它會如何失敗?個別鍵盤事件仍然會被解僱,您可以追蹤它們嗎? –