Страницы

Поиск по вопросам

воскресенье, 10 марта 2019 г.

Key Hook не определяет 4 кнопки сразу

Хочу выводить нажатые клавиши пользователем, в том числе сочетания. Пробовал разные Key Lisener/Hook (они работают по одному и тому же принципу), но везде одна и та же проблема - у меня получается нажать 4 клавиши одновременно: A + S + D + F, но вот никак не получается нажать G + H + V или все 4 стрелочки.
Хотелось бы поддерживать 5 одновременных нажатий.
Использую этот гист: https://gist.github.com/Ciantic/471698
Код формы:
public partial class KeyDisplayerForm : Window { private KeyboardListener KListener; private List keys;
public KeyDisplayerForm() { InitializeComponent();
KListener = new KeyboardListener(); KListener.KeyDown += new RawKeyEventHandler(KListener_KeyDown); KListener.KeyUp += new RawKeyEventHandler(KListener_KeyUp);
keys = new List(); }
private void KListener_KeyUp(object sender, RawKeyEventArgs e) { keys.RemoveAll(x => x == e.Key.ToString()); Show(); }
private void KListener_KeyDown(object sender, RawKeyEventArgs e) { if (!keys.Exists(x => x == e.Key.ToString())) { keys.Add(e.Key.ToString()); Show(); } }
private void Show() { label.Content = ""; foreach (var key in keys) { label.Content += $"{key} + "; } }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { KListener.Dispose(); } }
Разметка формы:


Ответ

Это аппаратная проблема. Зависит исключительно от разводки проводящих дорожек для клавиш и, иногда, от контроллера.
Обычно можно отловить одновременное нажатие стандартных "геймерских" клавиш, и то не на всех моделях. На бюджетных пленочных - 2-3 клавиши потолок, и то не любые, как повезет. На более дорогих моделях и старых механических может быть больше, иногда существенно.

Комментариев нет:

Отправить комментарий