Что нового

[Автоматизация] Сменить раскладку клавиатуры на требуемый язык

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Подскажите пожалуйста, ув. знатоки, как средствами AutoIT сменить раскладку языка на нужний мне (русский).
Для чего мне это нужно: Хочу добавить сайт в список совместимости IE, вот пример:
Код:
#include <IE.au3>
#Include <WinAPIEx.au3>
Global $a
Const $LANG_RUS = 0x0419 ;Русский
Const $LANG_ENG = 0x0409 ;Англиский
Do
$oIE = _IECreate ()
Until IsObj ($oIE)
Do
$hWnd = WinGetHandle('Пустая страница - Internet Explorer')
$GetLang = '0x' & Hex(BitAND(_WinAPI_GetKeyboardLayout($hWnd), 0xFFFF), 4)
If $GetLang = $LANG_RUS Then
	$a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "!е")
	  $a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "р")
;~ 	  <---------------------------------- И так далее......
Else
;~ 	_WinAPI_SetKeyboardLayout($Rus, $hWnd)	 <--------------------- Вот тут поменять язык на "русский" $LANG_RUS = 0x0419 не получается...
EndIf
Until $a = 1


Но не удается с помошью функции _WinAPI_SetKeyboardLayout($Rus, $hWnd) изменить язык. Может я не правильно её использую?? Или есть другие варианты добавления сайтов в режим совместимости IE ?? Буду рад услышать Ваше мнение :ok:
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Немного проблемму решил, вот таким способом:
Код:
#include <IE.au3>
#Include <WinAPIEx.au3>


$LANG_RUS = 0x0419 ;Русский
$LANG_ENG = 0x0409 ;Англиский
$hWnd = WinGetHandle('')
$GetLang = '0x' & Hex(BitAND(_WinAPI_GetKeyboardLayout($hWnd), 0xFFFF), 4)
If $GetLang = $LANG_RUS Then
Else
   _WinAPI_LoadKeyboardLayoutEx($LANG_RUS, $hWnd)
EndIf
Do
$oIE = _IECreate ()
Until IsObj ($oIE)
$a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "!е")
$a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "р")


Проблема вот в чем:
Если стоит раскладка английская, то скрипт меняет её на русскую, запускает окно IE, но
Код:
$a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "!е")
$a = ControlSend ( "Пустая страница - Internet Explorer", "", "", "р")
результата не дают.
Если же скрипт запустить еще раз, т.е. когда раскладка стала русской, то все работает. Как такое может быть? В чем моя ошибка?
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
JIereHga2010
Код:
#include <IE.au3>
#include <WinAPISys.au3>
_WinAPI_SetKeyboardLayout(WinGetHandle(AutoItWinGetTitle()), 0x0419)
Do
  $oIE = _IECreate()
Until IsObj($oIE)
$hWnd = WinWaitActive("[class:IEFrame]")
$hCtrl = ControlGetHandle($hWnd, "", "Internet Explorer_Server1")
_WinAPI_SetKeyboardLayout($hCtrl, 0x0419)
ControlSend($hWnd, "", $hCtrl, "!ер")
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Пасиб, это то что нужно :laugh:
Кстати, если кому интересно, добавить в режим совместимости сайты можно путем записи в reg.
Мне помогло вот это:
Код:
$Ini = RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData", "UserFilter" )
If Not $Ini = "0x411F00005308ADBA010000002800000001000000010000000C000000F4FA5DC5CFFDCF010100000005006F006B002E0072007500" Then $Ini = RegWrite ( "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" , "UserFilter" , "REG_BINARY" , "0x411F00005308ADBA010000002800000001000000010000000C000000F4FA5DC5CFFDCF010100000005006F006B002E0072007500")
 
Верх