Программное различие между физической и виртуальной клавиатурой - PullRequest
0 голосов
/ 01 октября 2018

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

Я пытался использовать член KeyboardPresent класса Windows::Devices::Input::KeyboardCapabilities, но он возвращает значение true, даже если нет физических клавиатур.

Я также пытался использовать класс Windows::Devices::Enumeration::DeviceInformation, но информация, возвращаемая из него, настолько полная, насколько это возможно, не содержит информации о природе устройства.Возможно, это так, и я это пропустил

Оба эти подхода были испытаны на Surface 4 Pro.

1 Ответ

0 голосов
/ 02 октября 2018

Эта информация не предоставляется никаким Windows API, потому что сама Windows не знает, какие устройства являются виртуальными или физическими.

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

Единственный способ, о котором я могу думать:

  • Компиляциясписок известных имен виртуальных клавиатур / идентификаторов оборудования и идентифицируйте клавиатуры с этим.

  • Составьте список известных драйверов виртуальных устройств и определите драйвер, используемый для конкретной клавиатуры.

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

  • Сочетание вышеперечисленного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...