Кто не знает этого воистину целительного сочетания клавиш - CTRL+ALT+DEL? А попробуйте ка нажать их одной рукой! То-то, тут без распальцовки никак не обойтись! Не вдаваясь в историю проектирования клавиатуры, формата пальцев разработчика и выбора данной комбинации, очень популярной, кстати говоря, в народе, можно смело утверждать - нужно тренировать пальцы или включать мозги! С пальцами у автора напряженка - не музыкальные они, больше с паяльником... А вот со второй частью вроде всё в порядке. Идеей послужила вот эта клавиатура неизвестного ценителя постмодернистского искусства реинкарнации винды а ля "оживим покойничка":
Но она только для очень "продвинутых" пользователей. Нам бы, простым программистам, что нибудь попроще, не такое замысловатое. Например, такую клавиатуру, которая будет по нажатию на определённую клавишу отдавать системе целую комбинацию не только стандартных сочетаний, но и своих, заранее определённых. Ну например, стандартный кусок часто повторяющегося в разных проектах кода, целые макросы для управления системой, шаблоны писем с приветствием и подписью. Да мало ли чего ещё может понадобиться! Кто-то скажет - а зачем это всё нужно, бери копируй и вставляй или на клавиатуре пальчиками долби... Может для кого то это и так, а для меня - разработать железо, написать ПО, разобраться в проблеме и воплотить это в реальную конструкцию - часть моей жизни. Моё хобби. Моя работа. Мой отдых. Мой сон. Мои планы. Поддержка моей семьи и коллег. Игрушка конечно, но это ещё один шаг к вершинам мастерства :))
Схема стандартная для подключения подобного рода устройств, собранных на софтовой реализации USB.
У меня завалялась клавиатура от старого кассового аппарата размерностью 5х7, вот её я и решил приспособить для своих нужд.
Вы можете использовать свою другой размерности (даже больше -осталось ещё 2 свободных пина), придется только немного переделать функцию опроса клавиш. Можете подключить полноценную PS/2 клавиатуру или клавиатуру от вашего любимого древнего ПК, с которого начинали свой путь. Или поставить всего лишь несколько одиночных клавиш. Или вообще без клавиш - подарок другу на 1 апреля - с генерацией случайных символов через случайный промежуток времени, смену регистра, подачу команд. Только потом, когда убедитесь, что друг уже "очень доволен", не забудьте вернуть девайс туда, куда ему и положено - в дальний ящик стола до следующего праздника.
Итак, в результате экспериментов получилось устройство - HID клавиатура, первые 33 клавиши которой передают в компьютер символы клавиш от "а" в английской раскладке до цифры "7" или соответствующие русские символы - от "ф". 34 клавиша - такие вожделенные для нас CTRL+ALT+DEL! 35 клавиша - передаёт "Qwerty! ". Ну а дальше ориентируйтесь на код, изменяйте свои сочетания клавиш, программируйте целые фразы. Прошу только об одном - не делайте "клавиатуру ПАДОНКА"! Их и так хватает, сделайте что-нибудь полезное! Кстати, светодиоды клавиатуры отражают реальное состояние стандартной клавиатуры. Помимо своего визуального предназначения, их состояние может пригодиться для анализа кода, который нужно передавать в том или ином случае. Например, будут буквы в верхнем или нижнем регистре - зависит от состояния Caps Lock.
Следует обратить внимание на формат передаваемого репорта:
' Формат передаваемого репорта - usb_tx_buffer:
_usb_tx_buffer2(2) = 0 ' modifier - комбинация из 8-ми модификаций (левые и правые Ctrl, Alt, Shift, Win) _usb_tx_buffer2(3) = 0 ' reserved - резерв _usb_tx_buffer2(4) = 0 ' keycode 0 - код клавиши 0 _usb_tx_buffer2(5) = 0 ' keycode 1 - код клавиши 1 _usb_tx_buffer2(6) = 0 ' keycode 2 - код клавиши 2 _usb_tx_buffer2(7) = 0 ' keycode 3 - код клавиши 3 _usb_tx_buffer2(8) = 0 ' keycode 4 - код клавиши 4 _usb_tx_buffer2(9) = 0 ' keycode 5 - код клавиши 5
' modifier ' bit0 LEFT CTRL (1) ' bit1 LEFT SHIFT (2) ' bit2 LEFT ALT (4) ' bit3 LEFT WIN (8) ' bit4 RIGHT CTRL (16) ' bit5 RIGHT SHIFT (32) ' bit6 RIGHT ALT (64) ' bit7 RIGHT WIN (128)
' CTRL + ALT + DEL ' Эту комбинацию нужно передать так: &H05, &H00, &H4С, &H00, &H00, &H00, &H00, &H00 = 5[Ctrl(1) + Alt(4)], 0, 76, 0, 0, 0, 0, 0 ' В первый байт попадает сумма модификаций клавиш (левые и правые Ctrl, Alt, Shift, Win)
Не забывайте после передачи кода клавиши передать в репорт все нули - признак отпускания клавиши! Иначе вы рискуете подвесить компьютер, что я успешно и делал несколько раз, пока отлаживал код. Что может пригодиться для самостоятельного изменения логики работы?
- Скан коды клавиатуры HID и их соответствие PS2
- Графическое представление клавиш стандартной клавиатуры с её HID-кодами.
- Полный список системных "горячих клавиш" в XP -> Пуск -> Справка и поддержка -> Настройка компьютера -> Клавиатура и мышь -> Общие сведения о сочетаниях клавиш WINDOWS.
Ну а мне пока предстоит самая интересная часть работы - придумать необходимые мне сочетания клавиш, заготовки текста, участки кода... Облагородить клавиатуру - сделать соответствующие наклейки... Ну и привыкнуть к ней... Ну а на её основе можно сделать генератор паролей и поместить чудо в корпус б/у флешки, визитную карточку, "подарок другу"...
Удачи и вам в ваших творческих порывах!
P.S. Если добавить RC5, получится дистанционное управление компьютером! А клавиши вы сможете в коде назначить так, как вам удобно.
Фото отчёт от MAX50:
Информация к размышлению... Для организации мультимедийных клавиш необходимо установить такой дескриптор:
Item Tag (Value) | Raw Data | Usage Page (Consumer Devices) | 05 0C | Usage (Consumer Control) | 09 01 | Collection (Application) | A1 01 | Report ID (1) | 85 01 | Usage Minimum (Undefined) | 19 00 | Usage Maximum | 2A F0 02 | Logical Minimum (0) | 15 00 | Logical Maximum (752) | 26 F0 02 | Report Count (1) | 95 01 | Report Size (16) | 75 10 | Input (Data,Ary,Abs) | 81 00 | End Collection | C0 | Usage Page (Generic Desktop) | 05 01 | Usage (System Control) | 09 80 | Collection (Application) | A1 01 | Report ID (2) | 85 02 | Usage Minimum (System Power Down) | 19 81 | Usage Maximum (System Wake Up) | 29 83 | Logical Maximum (1) | 25 01 | Report Size (1) | 75 01 | Report Count (3) | 95 03 | Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) | 81 02 | Report Count (5) | 95 05 | Input (Cnst,Ary,Abs) | 81 01 | End Collection | C0 |
Там вы найдёте коды мультимедийных клавиш. Они передаются 3 байтами.
Пример: [Play/Pause] -- 01CD00 [Mute] -- 01E200 [Stop] -- 01B700 [Volume UP] -- 01E900 [Volume Down] -- 01EA00 [Rewind] -- 01B600 [FastForward] -- 01B500
[My PC] -- 019401 [My Doc] -- 01A302
[calculator] -- 019201 [sleep] -- 0202 Internet: [<-] -- 012402 [->] -- 012502 [reload] -- 012702 [close] -- 012602 [browser] -- 012302 [search] -- 012102 [faworites] -- 012A02 [e-mail program] -- 018A01
Можно поменять репорт, не забывая указывать его размерность в 2 местах и передавать нужные коды клавиш, а можно попробовать сделать составное устройство с обычными клавишами и мультимедийными. Вышеуказанный документ очень поучительный в плане где брать коды всяких разных стандартных устройств. О существовании некоторых я и не догадывался!
Удачи вам в ваших творениях, товарищи! Не забывайте делиться кодом с нами, мы вас никогда не забудем!
Обрабатываю 3 кнопки - вызов калькулятора и управление громкостью. Всё работает! И даже без дублирования команд!
Осталось слить 2 дескриптора и их обработку. Кто смелый?!
|