Да, но теперь другая проблема... Я пишу задачу для nnCron, которая при активизации этого окна будет переключать в нем раскладку. Использовал пример из FAQ.
Суть проста - при логоне в цикле пускается нижеследующий скрипт, который сперва ждет активизации окна, переключает раскладку, а потом ждет деактивизации, и завершает работу. Тут же запускается по новой, ждёт и т.п. Как можно убедиться, переключение раскладки - не работает! Я жму Win-R, вижу окно и... печатаю в нем по-русски. А как указано в секции параметры, должен бы по-английски... а в трее балун кажет, что уже
WinWaitNotActive выполняется, значит
_SetKeyboardLayout уже отработал... Тестировал скрипт на одиночном его запуске, добавил строку, которой проверяю правильность полученного хэндла... все вроде правильно....
Код:

Const $DEU = "00000407" ;Немецкий (стандартный)
Const $ENU = "00000409" ;Английский (США)
Const $FRA = "0000040C" ;Французский (стандартный)
Const $FIN = "0000040D" ;Финский
Const $ITA = "00000410" ;Итальянский
Const $PLK = "00000415" ;Польский
Const $RUS = "00000419" ;Русский
Const $UKR = "00000422" ;Украинский
Const $BLR = "00000423" ;Белорусский
Const $EST = "00000425" ;Эстонский
Const $LTH = "00000426" ;Латвийский
Const $LVI = "00000427" ;Литовский
Const $CHS = "00000804" ; Chinese (People's Republic of China)
Const $CHT = "00000404" ; Chinese (Taiwan)
;--------=========================ПАРАМЕТРЫ========================-------------
;
$WinTitle = "Запуск программы"
$layout = $ENU
;--------=========================КОД========================-------------
Opt("TrayIconDebug", 1)
Opt("WinTitleMatchMode", 2)
WinWaitActive($WinTitle)
Opt("WinTitleMatchMode",4)
$hWnd = WinGetHandle("last")
; раскомментируйте следущую строку, чтобы убедиться, что handle получается правильный!
; WinClose($hWnd)
;переключение раскладки в окне, определяемом указателем $hWnd
; вот эта функция не работает
_SetKeyboardLayout($layout, $hWnd)
Opt("WinTitleMatchMode", 2)
WinWaitNotActive($WinTitle)
Exit
; --------=========================ПОДВАЛ========================-------------
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret[0])
EndFunc
Может, это не работает потому, что у меня помимо русской и английской стоит также и китайская раскладка?