2014-09-24 1 views
0

У меня есть приложение, которое хочет обнаружить несколько ключей на клавиатуре (событие keydown в C#). В последнем случае у меня ограниченное обнаружение ключей (может быть 4 ключа) при блокировке событий, а также я не могу запустить событие, когда «fn» keydown. есть 2 вопроса: 1. Как обнаружить ключи как можно больше 2. Как обнаружить ключи Fn при событии keydown key.несколько ключей keydown на клавиатуре одновременно раз в C#

Здесь я использую библиотеку 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 и альт – Sayse

+0

да хороший ответ несколько ключей. спасибо pnuts – Wintronic

ответ

1

Вы не можете получить событие KeyDown с несколькими ключами.

Однако, вы можете проверить ключи, которые в настоящее время прессованных, или вы можете следить за всеми теми, которые Down в данный момент (записать их, когда вы получаете KeyDown и удалить, когда вы получаете KeyUp).

Существует фиксированный предел одновременного нажатия клавиш на основе аппаратной клавиатуры. Вполне возможно, что некоторые комбинации клавиш позволяют вам одновременно регистрировать два ключа, в то время как другие более пригодны для использования. И, конечно же, есть игровые клавиатуры, которые могут легко отслеживать 20 или более за раз.

+0

Как насчет обнаружения клавиши Fn при событии keydown key в C#? – Wintronic

+0

@Wintronic Я не думаю, что клавиша 'Fn' отправляется вообще (я думал, что вы имели в виду F1-12 изначально) - если я не ошибаюсь, только конкретная комбинация' Fn' и что-то, что имеет альтернативное значение отправлено. 'Fn' не является ключом, о котором знает Windows (клавиатура отправляет специальную команду для каждой из комбинаций, например' Keys.MediaNextTrack'). Это не ключ-модификатор, который вы можете использовать с любыми другими ключами, в отличие от 'Ctrl' или' Alt'. – Luaan

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

Смежные вопросы