Я работаю над программой, которая должна записывать и воспроизводить нажатия клавиш. Основной процесс выполняется как служба, поэтому для записи нажатий клавиш требуется программа конфигурации.Как определить раскладку клавиатуры для другого процесса (Windows)?
Проблема возникает, когда стандартная раскладка клавиатуры по умолчанию (скажем) на английском языке, и раскладка клавиатуры пользователя на данный момент (скажем) на немецком языке. Пользователь вводит символ «ü» в интерфейс конфигурации, который должным образом записывается и сохраняется.
Теперь пользователь запускает «Блокнот» и пытается воспроизвести нажатие клавиши назад, которое выполняет дочерний элемент службы. При преобразовании ввода для перехода к SendInput
, мы вызываем VkKeyScan
, который затем говорит нам, что нет способа воспроизвести этот символ на этой клавиатуре (помните, что раскладка клавиатуры по умолчанию - английский).
Что мне действительно нужно сделать, это синхронизировать раскладки клавиатуры службы и текущее приложение переднего плана, поэтому служба может воспроизводить любой символ, который пользователь может использовать с помощью своей клавиатуры. GetKeyboardLayout
работает только в текущем процессе. Это должно работать как на 32, так и на 64-битных, поэтому сообщение об ошибке ... не рекомендуется :).
Это не будет работать из службы (хорошо, это будет работать с интерактивной службой, но использование интерактивных сервисов не рекомендуется и не будет работать в новых версиях Windows). – jdigital
Я не знаю, почему я об этом не думал. @jdigital, он действительно будет работать, потому что у службы есть рабочий процесс в сеансе пользователя. Благодаря! –