2017-01-25 10 views
1

Мне нужно различать нажатие (по крайней мере) двух USB-клавиатур, подключенных к одному ПК. Существует ли способ/прецедент, чтобы решить, нажата ли клавиша '(например) либо клавиатурой A, либо клавиатурой B? (предпочтительный язык C#)Как отличить нажатие более одной USB-клавиатуры, подключенной к одному и тому же хосту (в C#)

Псевдо-код:

if (keyPressed == 's') 
{ 
    if(keyboardID == 'A') 
    { 
     print("Key 's' was pressed by Keyboard A"); 
    } 
    else if (keyboardID == 'B') 
    { 
     print("Key 's' was pressed by Keyboard B"); 
    } 
} 
+0

I рекомендовал бы предоставить больше контекста для вашего вопроса. Будет ли это запускаться как консольное приложение или приложение для форм выигрышей и т. Д. – Theo

+0

Я буду наблюдать за этим для ответа, так как мне было немного любопытно (как и с мышами). Я уверен, что это связано с конкретным указанием адреса используемого USB-порта, IRQ или аналогичного. – CDove

+0

windows или linux? – eactor

ответ

1

Краткое добраться до уровня водителя и перехватывать нажатие клавиши там, вы действительно не можете (я думаю). Я использую клавиатуру bluetooth и клавиатуру Bluetooth и не могу найти способ делать то, что вы просите, поэтому номер 3 на клавиатуре будет отличаться от номера 3 на клавиатуре.

0

нажатия клавиш обрабатываются операционной системой, как событий

в Linux для каждого устройства ввода есть отдельные очереди событий в /dev/input/event* (* означает определенный номер устройства)

в Linux вы можете перечислить все входные устройства с командой sudo lsinput (input-utils)

Вы можете записывать конкретные события для каждой из ваших клавиатур, см. Linux keyboard event capturing /dev/inputX

в окнах это похоже. вы можете использовать rawInput и получить ручку для каждого устройства. глубже информация и примеры кодов в

https://blogs.msdn.microsoft.com/oldnewthing/20160627-00/?p=93755 ("Ручка устройства говорит нам, какой клавиатура генерироваться вход ...")

https://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

raw input handling (distinguishing secondary mouse)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms645543%28v=vs.85%29.aspx