2011-01-18 3 views
2

Есть ли способ программно узнать, какая клавиатура имеет компьютер (например, где расположены ключи и какие дополнительные ключи присутствуют в каких местах)?Получить физическую раскладку клавиатуры Программно

Небольшая ошибка допустима, если клавиатура очень нестандартная, но в целом необходимо сконструировать экранное клавиатурное приложение, которое может динамически рисовать раскладку клавиатуры на экране с высокой точностью ,

+0

Какой язык (ы) вы используете? – berry120

+1

Независимо от того, что использует Windows :) ... отличается ли решение от языка? – Mehrdad

ответ

2

Нет механизма, с помощью которого клавиатура может сообщить Windows о том, как выглядит ее физический макет. Osk.exe. Легко видеть с версией Windows на экранной клавиатуре. Кажется, он способен угадать форм-фактор машины (ноутбук и настольный компьютер), но на моем ноутбуке он не соответствует макету клавиатуры.

Используйте макет osk.exe в качестве шаблона, чтобы никто не мог пожаловаться на то, что ваш не подходит.

+0

Есть ли действительно * нет * способ, скажем, передать данные непосредственно в/из драйвера, чтобы получить эту информацию? – Mehrdad

+2

Нет. Даже водитель не заботится точно, где пользователь ставит свои пальцы. –

+0

Это может показаться глупым, но есть ли способ обойти драйвер и запросить клавиатуру? (Например, эквивалент клавиатуры для сквозного запроса SCSI?) – Mehrdad

2

При подключении к компьютеру клавиатуры посылают «коды сканирования» в операционную систему. на окнах, коды сканирования затем преобразуются в виртуальные ключи (аппаратное независимое отображение клавиатуры), а затем в реальные символы.

MapVirtualKeyEx() Функция API окна позволяет вам переводить между кодами сканирования, виртуальными ключами и символами. он также должен быть в состоянии сказать вам, если ключ не существует.

вместе с GetKeyboardLayout(), который сообщает вам, какой keybaord активен в любой момент времени (раскладка клавиатуры может отличаться для разных запущенных приложений), это должно позволить вам построить довольно точную карту клавиатуры.

в любом случае, посмотрите на keyboard input section of the MSDN

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

+0

Но таким образом вы получаете только номер ключа, который имеет макет, не так ли? Или этот загруженный номер включает медиа-кнопки? –

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