Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Да, но теперь другая проблема... Я пишу задачу для 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

Может, это не работает потому, что у меня помимо русской и английской стоит также и китайская раскладка?

Отправлено: 21:44, 17-02-2006 | #14