#python #windows #python_3x #winapi
Как можно узнать раскладку клавиатуры в определенном окне/процессе и сменить её? Допустим, открыто стороннее приложение. В зависимости от условий нужно сменить раскладку клавиатуры, их всего две: английская и русская. Что-то вроде такого: if GetLayout() == 'en' and another_condition: LoadLayout('ru') do_something() elif GetLayout() == 'ru' and another_condition: LoadLayout('en') do_something() Написано грубо, но суть ясна: необходимо получить текущую раскладку и сменить её. Подскажите, каким образом это можно сделать? Используется Windows 7 x64. Нашёл вот такой ответ, но не смог разобраться в коде на C++.
Ответы
Ответ 1
Для того, чтобы выполнить задачу необходимо установить дополнительную библиотеку pywin32, которая предоставляет доступ к функциям Windows API из Python. Из этой библиотеки нам понадобится модуль win32api. >>> import win32api Исследовав его содержимое можно увидеть, что для работы с раскладкой клавиатуры есть несколько функций и одно системное сообщение Windows - WM_INPUTLANGCHANGE: GetKeyboardLayout GetKeyboardLayoutList LoadKeyboardLayout В данном случае для нас важна именно последняя функция - LoadKeyboardLayout. Данная функция загружает новую раскладку (если она еще не загружена) и предпринимает после этого еще какие-то действия; принимает в качестве аргументов два параметра: строка с идентификатором раскладки. действие Более подробно о их возможных значениях можно почитать в MSDN. Итак, нам важны две вещи: Получить идентификатор раскладки. Вторым параметром передать действие переключения на загруженную раскладку. Первый параметр мы можем с легкостью получить из реестра по пути: HKEY_CURRENT_USER/Keyboard Layout/Preload. Итак, выберем переключение на русский язык. В реестре видим примерно следующее: Значение записи реестра как раз и будет нужным идентификатором раскладки. Итак, все, что надо сделать: >>> import win32api >>> win32api.LoadKeyboardLayout("00000419",1) Информация взята из блога Ростислава Дзинько
Комментариев нет:
Отправить комментарий