在Delphi中我有以下問題(但它可能被視爲一般編程問題)。如何檢測非修飾鍵的按鍵組合?
我想以某種處理鍵按壓事件超過一個非修飾鍵組合,例如,用於像甲 + d或d + 快捷方式˚F或d + F + G。
我知道如何處理與修改鍵的快捷方式例如像CTRL + d或CTRL + ALT + d或ALT + d,但我怎麼能檢測非 - 修改鍵按下組合?
在Delphi中我有以下問題(但它可能被視爲一般編程問題)。如何檢測非修飾鍵的按鍵組合?
我想以某種處理鍵按壓事件超過一個非修飾鍵組合,例如,用於像甲 + d或d + 快捷方式˚F或d + F + G。
我知道如何處理與修改鍵的快捷方式例如像CTRL + d或CTRL + ALT + d或ALT + d,但我怎麼能檢測非 - 修改鍵按下組合?
每個單獨的按鍵生成單獨的OnKeyDown
,OnKeyPress
和OnKeyUp
事件。所以你有三個選擇:
跟蹤當前按下的每個鍵。對於您收到的每個密鑰,請在OnKeyDown
事件中爲其設置一個標記,並在相應的OnKeyUp
事件中清除標記。當您d得到OnKeyDown
事件,請檢查您是否已經標記一個,˚F,摹等OnKeyDown
和OnKeyUp
事件也將告訴你CTRL的狀態,ALT ,和SHIFT鍵。
使用Win32 API GetKeyboardState()
,GetKeyState()
或GetAsyncKeyState()
函數。當您d得到OnKeyDown
事件,詢問是否一個,˚F,摹,CTRL等目前按住OS。
對於某些序列,您可以使用RegisterHotKey()
並讓操作系統爲您跟蹤密鑰。當檢測到註冊序列時,您將收到一條WM_HOTKEY
消息。
非常感謝!我會證明你的方法,特別是對於第1點和第2點!謝謝! –
如果有人在移動鼠標(想到一臺筆記本電腦的觸摸板 - 很多時候我在打字時偶然碰到它),方法#1可能會失敗。我不知道有什麼可能會失敗#2。 –
@LorenPechtel:只是感興趣。它會如何失敗?個別鍵盤事件仍然會被解僱,您可以追蹤它們嗎? –
不,沒有特別的事件處理程序,您必須手動跟蹤鍵序列。 (順便說一下,請不要大聲呼喊) –
請不要使用屬於您主題標籤的信息。這裏的標籤系統非常好,並且不需要幫助(特別是在SHOUTED時)。使用標籤 - 這就是他們的目的。 –
對不起,我是新的! :) –