2014-09-24 105 views
0

我有一個應用程序要檢測鍵盤上的多個鍵(在c#中的keydown事件)。 最後,我在事件keydown中有有限的鍵檢測(可能是4個鍵),並且當「fn」鍵時,我也無法觸發事件。 這裏有2個問題: 1.如何檢測儘可能多的鍵 2.如何在鍵盤按鍵事件時檢測Fn鍵。一次在c鍵盤上的多個鍵keydown#

在這裏,我使用了我從其他解決方案中找到的globalKeyboardHook庫。

private void Form1_Load(object sender, EventArgs e) 
    { 
     gkh.HookedKeys.Add(Keys.A); 
     gkh.HookedKeys.Add(Keys.B); 
     gkh.HookedKeys.Add(Keys.D); 
     gkh.HookedKeys.Add(Keys.F); 
     gkh.HookedKeys.Add(Keys.G); 
     gkh.HookedKeys.Add(Keys.H); 
     gkh.HookedKeys.Add(Keys.J); 
     gkh.HookedKeys.Add(Keys.K); 
     gkh.HookedKeys.Add(Keys.L); 
     gkh.HookedKeys.Add(Keys.Z); 
     gkh.HookedKeys.Add(Keys.X); 
     gkh.HookedKeys.Add(Keys.C); 
     gkh.HookedKeys.Add(Keys.V); 
     gkh.HookedKeys.Add(Keys.B); 
     gkh.HookedKeys.Add(Keys.N); 
     gkh.HookedKeys.Add(Keys.M); 
     gkh.HookedKeys.Add(Keys.Q); 
     gkh.HookedKeys.Add(Keys.W); 
     gkh.HookedKeys.Add(Keys.E); 
     gkh.HookedKeys.Add(Keys.R); 
     gkh.HookedKeys.Add(Keys.T); 
     gkh.HookedKeys.Add(Keys.Y); 
     gkh.HookedKeys.Add(Keys.U); 
     gkh.HookedKeys.Add(Keys.I); 
     gkh.HookedKeys.Add(Keys.O); 
     gkh.HookedKeys.Add(Keys.P); 
     gkh.HookedKeys.Add(Keys.NumLock);    
     gkh.HookedKeys.Add(Keys.Insert); 
     gkh.HookedKeys.Add(Keys.FinalMode); 
     gkh.KeyDown += new KeyEventHandler(gkh_KeyDown); 


    } 


    void gkh_KeyDown(object sender, KeyEventArgs e) 
    { 
     Console.WriteLine(e.KeyCode.ToString()); 
     e.Handled = true; 
    } 

我真的很高興,如果你能幫助我。 謝謝。

+1

它的鍵盤架構,您無法讀取比如ctrl和alt – Sayse 2014-09-24 07:24:31

+0

耶不錯的答案等多重鍵的一部分。感謝pnuts – Wintronic 2014-09-26 08:44:14

回答

1

您無法獲得帶有多個密鑰的KeyDown事件。

但是,您可以檢查當前按鍵,或者你可以跟蹤所有這些,在目前是Down的(記錄下來,當你KeyDown,當你得到KeyUp刪除)。

基於硬件鍵盤,同時按下的鍵有固定限制。很可能,某些組合鍵只允許您同時註冊兩個鍵,而其他鍵則更易於使用。當然,還有遊戲鍵盤可以輕鬆保持20個或更多的軌道。

+0

如何檢測鍵盤keydown事件在c#中的Fn鍵? – Wintronic 2014-09-26 08:45:41

+0

@Wintronic我不認爲'Fn'鍵完全被髮送(我原以爲你的意思是F1-12) - 如果我沒有弄錯,只有'Fn'和具有其他含義的特定組合已發送。 'Fn'不是Windows知道的關鍵字(鍵盤會爲每個組合發送一個特殊命令,例如'Keys.MediaNextTrack')。它不是一個修飾鍵,你可以使用任何其他鍵,不像'Ctrl'或'Alt'。 – Luaan 2014-09-26 11:23:07

0

有一個託管庫MouseKeyHook as nuget它支持檢測快捷方式,組合鍵和序列。 Source code on github。下面是一個使用示例:

void DoSomething() 
{ 
    Console.WriteLine("You pressed UNDO"); 
} 

Hook.AppEvents().OnCombination(new Dictionary<Combination, Action> 
{ 
    {Combination.FromString("Control+Z"), DoSomething}, 
    {Combination.FromString("Shift+Alt+Enter"),() => { Console.WriteLine("You Pressed FULL SCREEN"); }} 
}); 

欲瞭解更多信息,請參閱:Detecting Key Combinations and Seuqnces