| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > Как установить Keyboard Layout из Python? |
| Автор: belonesox 5.11.2009, 02:09 | ||
| Есть задача некой автоматизации/генерации Windows-событий для оконных программ. Вот минимальный макет - запускаем Блокнот, и бьем некоторое количество нажатий и отпусканий клавиш. В идеале хотим получить в блокноте "qqqqqqqqqqййййййййййй". Проблема в том, что нужно уметь не только слать правильные коды клавиш, но и задавать для них правильную раскладку (думаю, у всех читающих есть 409 и 419 локали). А с этим проблема - единственный WinAPI-вызов, что можно использовать из кошерных pywin32 модулей - это LoadKeyboardLayout (ActivateKeyboardLayout - нету). Теоретически и его должно хватить - но нет, не получается, какие бы комбинации флагов к нему я не заказывал.
Собственно вопрос - может кто-то сталкивался с аналогичной задачей и успешно ее решил? Может это у меня какая-то проблема в "консерватории"? Заранее благодарен за ответ, с уважением, Стас Фомин (Workaround-ы с дополнительными DLL-ями, включая самописные, или использованием hotkey для раскладок сразу бы не хотелось рассматривать, вдруг есть правильное и красивое решение). |
| Автор: shupg 6.11.2009, 20:23 |
| LoadKeyboardLayout только добавляет в список возможных расскладок первый параметр. Так как, наверняка, у тебя уже есть в списке русский - ты не видишь изменений. Может быть воспользоваться CTRL+Shift или типа того? |
| Автор: belonesox 6.11.2009, 21:56 | ||
Да нет, он должен и активную раскладку менять (с соотв. флагами). Проблема только в том (IMHO), что раскладку он меняет не у Notepada (которому шлют кейкоды), а у питоновского процесса, т.е. эффекта никакого нет. Поменять раскладку кейкодами можно, но некрасиво (ибо идея — по символу выяснить кейкод и раскладку, и перед посылкой каждого кейкода слать хоткеи выбора раскладки — уродлива до невозможности). Для своей задачи — слать символы в окно я понятно, перейду на простой SendMessage/WM_CHAR, но думал, что может просто что-то не так понимаю (ну эта возможность еще сохраняется, да). Просто такая ситуация (если я не ошибся) — это, например, приговор библиотекам SendKey (и pywinauto), которые шлют символы через keybd_event (смесь русского с английским они слать не смогут, пока весь нижний уровень не переписать). |