Что нового

Проблема со сменой языка AutoIt3 в некоторых окнах

Yegorich_555

Новичок
Сообщения
20
Репутация
0
Всем привет. Есть задача: одним щелчком мыши открыть свойства драйвера конкретного устройства.
Для этого я написал следующий скрипт:
Код:
$win_handle = WinGetHandle ("Диспетчер устройств")
ShellExecute("devmgmt.msc")
WinWait($win_handle)
WinActivate($win_handle, "")
ControlSend($win_handle, "", "", "{TAB}")	

;~ переключение в русскую раскладку
_SetKeyboardLayout("00000419", $win_handle)
ControlSend($win_handle, "", "", "Мон")


Func _SetKeyboardLayout($sLayoutID, $hWnd)
    Local $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, _
                                                "int", $WM_INPUTLANGCHANGEREQUEST, _
                                                "int", 1, _
                                                "int", $ret[0])
											EndFunc
Exit

Смысл прост. Открываем диспетчер устройств, переключаем раскладку на русскую и посылаем TAB и 3 символа "Мон" - выделенная строка должна сразу попасть на "Монитор", к примеру. Все работает, за исключением одного: если открывать диспетчер устройств через скрипт Autoit3 то раскладка не переключается, хотя кнопка TAB посылается (т.е. окно активно). Если же диспетчер устройств открыть вручную или через bat-ник, то все происходит должным образом!!!
Примечание: диспетчер устройств пробовал открыть 3-мя командами:
1) ShellExecute("devmgmt.msc")
2) Run ("mmc.exe devmgmt.msc")
3) Run ("my.bat")
Результат тот же - не переключается раскладка! Как мне разрулить эту ситуацию через скрипт?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Yegorich_555 [?]
разрулить эту ситуацию через скрипт
Выделить пункт в дереве можно проще
Код:
ShellExecute("devmgmt.msc")
$wnd = WinWait("Диспетчер устройств")
ControlTreeView($wnd, "", "SysTreeView321", "Select", "#0|Мониторы")
;~ ControlTreeView($wnd, "", "SysTreeView321", "Expand", "#0|Мониторы")
 
Автор
Yegorich_555

Yegorich_555

Новичок
Сообщения
20
Репутация
0
Попробовал, но он не выделяет таким образом...Кое-что изменил:
Код:
ShellExecute("devmgmt.msc")
$wnd =("Диспетчер устройств")
WinWait($wnd)
WinActivate($wnd, "")
ControlSend($wnd, "", "", "{TAB}")
ControlTreeView($wnd, "", "SysTreeView321", "Select", "#0|Мониторы")

Вот так заработало. Дерево в диспетчере становится активным почему-то только при нажатии TAB. Спасибо :smile:
 
Автор
Yegorich_555

Yegorich_555

Новичок
Сообщения
20
Репутация
0
Да, уже понял! Класс!) Нашли обходной и лучший вариант. Но вопрос для разработчиков autoit остался)
 
Верх