Код:
#include <GuiConstantsEx.au3>
$Form1 = GUICreate('test', 200, 100, 500, 500)
GUISetState(@SW_SHOW)
$BTN_1 = GUICtrlCreateInput('', 20, 20, 60, 20)
$BTN_2 = GUICtrlCreateInput('', 120, 20, 60, 20)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $BTN_1
_SetKeyboardLayout("00000419", WinGetHandle(AutoItWinGetTitle()))
case $BTN_2
_SetKeyboardLayout("00000409", WinGetHandle(AutoItWinGetTitle()))
EndSwitch
wend
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", 0x50, "int", 1, "int", $ret[0])
EndFunc
Как убрать задержку при переключении раскладки? К примеру в GUI переходя из одного поля ввода в другое ставится условие чтобы в следующем поле раскладка менялась, но из за того что есть задрежка начало текста получается со старой раскладкой.
В общем получается пример ниже это единственный выход?
Код:
#include <GuiConstantsEx.au3>
#include <WinAPIEx.au3> ;альтернативное нажатие клавиш
$Form1 = GUICreate('test', 230, 70, 500, 500)
$BTN_1 = GUICtrlCreateInput('', 20, 20, 90, 20)
$BTN_2 = GUICtrlCreateInput('', 120, 20, 90, 20)
GUISetState(@SW_SHOW)
_SetKeyboardLayout("00000409", WinGetHandle(AutoItWinGetTitle()))
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $BTN_1
_WinAPI_Keybd_Event(0x12, 0) ;Alt
_WinAPI_Keybd_Event(0x10, 0) ;Shift
_WinAPI_Keybd_Event(0x10, 2) ;Shift
_WinAPI_Keybd_Event(0x12, 2) ;Alt
case $BTN_2
_WinAPI_Keybd_Event(0x12, 0) ;Alt
_WinAPI_Keybd_Event(0x10, 0) ;Shift
_WinAPI_Keybd_Event(0x10, 2) ;Shift
_WinAPI_Keybd_Event(0x12, 2) ;Alt
EndSwitch
wend
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", 0x50, "int", 1, "int", $ret[0])
EndFunc