![]() |
Как поменять раскладку клавиатуры через AutoIt на заданную?
Добрый день! Вариант send("!+") не подойдет, потому что нужно определить, какая раскладка у клавиатуры в данный момент, а потом высылать "!+" 1 или 0 раз.
Лучше же всего вообще обойтись без send. Как взаимодействовать с языковой панелью у меня нет даже идеи) Вообще задача такая: Код:
... ; запомнить, какой была ракладка до начала "махинаций" |
Код:
Global $Rus = '00000419'; Раскладка русского языка |
@kaster
В последней версии WinAPIEx.au3 уже используются не строковые значения для указания языка, а целочисленные - LCID константы. :) |
Yashied, да, это я уде опосля понял нашел в твое либе эти функции. а то что привел выше это из оффорума. наглец даже не указал откуда взял :teeth:
|
А как быть, если я создаю inputbox, в нем по умолчанию язык станет русским. Как поменять на английский?
Если так: Код:
_WinAPI_SetKeyboardLayout($hWnd, $Eng) Код:
inputbox(1,1) Попробовал поменять так: но что-то не меняется, а ошибки не вижу. |
Раньше я делал переключение расскладки клавиатуры, и заметил одно, что в таких окнах (если это окно на данный момент активно), как inputbox, или в окне Запуск программы (если нажать Пуск --> Выполнить), в Диспетчере задач windows и еще в некоторых, переключение расскладки с помощью такого способа (имеется ввиду способ описанный в примере kasterа или с помощью этого же способа, но использования библиотеки WinAPIEx.au3) не работает (Windows наверно думает что она умнее и поэтому расскладка клавиатуры в таких окнах не изменяется :( ), жалко что расскладку таким образом можно менять только в отдельном окне, хенд которого узнается, а не вобще, ибо если бы было что то наподобие как в windows меняется расскладка (shift+alt у меня), то было бы гораздо проще. А так поменял расскладку в каком то окне, запустил inputbox, а windows бах, и поставила какая до этого была установлена раскладка с помощью тех таки клавиш (shift+alt)... а другого способа наверное нет?.......
|
Т.к. в AutoIt нет многопоточности, могу посоветовать перед запуском InputBox запустить еще один скрипт, которые будет ждать окна с нужным заголовком, а после того, как дождется, поменяет там раскладку.
Примерно так. Готовишь вспомогательный скрипт следующего содержания Код:
Global $Rus = '00000419'; Раскладка русского языка Код:
InputBox('InputBoxTitle', 'Russian text') |
Все намного проще. Для изменения раскладки для любого окна созданного в AutoIt (в том числе и InputBox()), нужно изменить раскладку для скрытого окна AutoIt.
Код:
AutoItWinSetTitle('MyAutoItTitle') |
все гениальное просто :yes:
|
На самом деле это не есть хорошо. При смене раскладки клавиатуры системой посылаются сообщения WM_INPUTLANGCHANGE..., так вот, AutoIt окна, те что созданы с помощью GUICreate(), эти сообщения не обрабатывают. Только скрытое окно. В этом можно убедиться, применив _WinAPI_SetKeyboardLayout() к любому AutoIt-овскому окну, ничего не произойдет.
|
Странно, но в случае, описанном мною пару постов выше (#7), там где два скрипта запущены, то есть один мониторит, другое окно - цель, так вот там все норм меняется. или чего то недопонял :)
|
Я про GUICreate().
|
Забавно что даже такой скрипт не работает:
Код:
Run(@AutoItExe & ' /AutoIt3ExecuteLine "InputBox(''My InputBox'', ''Prompt'')"') |
Код:
_WinAPI_SetKeyboardLayout(0x0419, WinGetHandle("My InputBox")) Код:
_WinAPI_SetKeyboardLayout(WinGetHandle("My InputBox"), 0x0419) |
Оказывается действительно надо было просто поменять раскладку скрытого AutoIt окна :)
|
Время: 23:57. |
Время: 23:57.
© OSzone.net 2001-