WPF - 監聽判斷鍵盤組合鍵的按下


  • 對於鍵盤事件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,來進行監聽了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM