Получите физическую компоновку клавиатуры программно
-
12-10-2019 - |
Вопрос
Есть ли способ программно выяснить, какую клавиатуру есть у компьютера (т.е. где находятся ключи, и какие дополнительные ключи присутствуют в каких местах)?
Небольшая ошибка является приемлемой, если клавиатура очень нестандартная, но в целом эта точка состоит в том, чтобы построить на экране приложение, похожее на клавиатуру, которое может динамически нарисовать макет клавиатуры на экране с высокой точностью.
Решение
Нет механизма, с помощью которого клавиатура может рассказать Windows, как выглядит ее физическая макет. Легко увидеть с версией Windows на экране клавиатуры, osk.exe. Похоже, он в состоянии угадать форм-фактор машины (ноутбук против рабочего стола), но на моем ноутбуке он не соответствует расположению клавиатуры.
Используйте макет Osk.exe в качестве шаблона, чтобы никто не мог жаловаться, что ваш не совсем соответствует.
Другие советы
При подключении к компьютеру клавиатуры отправляют «коды сканирования» в операционную систему. В Windows коды сканирования затем преобразуются в виртуальные ключи (аппаратное независимое отображение клавиатуры), затем в реальные символы.
а MapVirtualKeyEx()
Функция API Windows позволяет переводить между кодами сканирования, виртуальными клавишами и символами. Он также должен быть в состоянии сказать вам, если ключ не существует.
вместе с GetKeyboardLayout()
Что сообщает вам, какой Keybaord активен в любой момент времени (макет клавиатуры может быть различной для различных запущенных приложений), он должен позволить вам создать довольно точную карту клавиатуры.
В любом случае, посмотрите на keyboard input section of the MSDN
Я добавлю, что все клавиатуры имеют почти одинаковую макет. Хотя нет никакого способа узнать, где находится ключ физически, вы, вероятно, можете угадать из кода сканирования и базовых знаний о ваших собственных клавиатурах.