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