- 對於鍵盤事件PreviewKeyDown、PreviewKeyUp、KeyDown、KeyUp,在其中檢查當次事件是哪個按鍵觸發的很簡單,只需要判斷KeyEventArgs類型的事件參數e的Key屬性。
- 如果需要判斷修飾鍵(Alt、Ctrl、Shift)是否同時被按下,以Window.KeyDown事件為例,有兩種寫法:
private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.H) { //同時按下了Ctrl + H鍵(H要最后按,因為判斷了此次事件的e.Key) //修飾鍵只能按下Ctrl,如果還同時按下了其他修飾鍵,則不會進入 } }
private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.H) { //同時按下了Ctrl + H鍵(H要最后按,因為判斷了此次事件的e.Key) //修飾鍵只要按下了Ctrl,不管按沒按其他修飾鍵,都會進入 } }
其中的e.KeyboardDevice.Modifiers,可以用Keyboard.Modifiers(Keyboard類的靜態屬性)來替換。
- 另外,也可以利用Keyboard類的靜態方法IsKeyDown,完全脫離事件參數e,來監聽判斷鍵盤按鍵(推薦) :
if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.H) && Keyboard.IsKeyDown(Key.C)) { //只要當下同時按下的鍵中包含LeftCtrl、H和C,就會進入 }
這種方式可以在任何時刻,檢測多個組合按鍵(不一定是修飾鍵),並且對按鍵順序和最后按的是哪個鍵沒有要求。
- 但是,以上方法有使用前提,都只在當前窗體獲得焦點時有效。
如果焦點在別的窗體上,或者用戶切換到別的應用程序時,則只好利用C#的平台調用功能,調用操作系統底層的dll,來進行監聽了。
