#region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) Opt('WinTitleMatchMode', 2) #endregion #Include <Misc.au3> #Include <Timers.au3> AutoItWinSetTitle(@AutoItPID) Global $hAutoItWin = WinGetHandle(@AutoItPID) HotKeySet('{ESC}', '_Pro_Exit') #region: - Chenge lang by Hot Key HotKeySet('{LWIN}{SPACE}', '_ChengeWinLang') HotKeySet('{RWIN}{SPACE}', '_ChengeWinLang') HotKeySet('+{SPACE}', '_ChengeWinLang') #endregion #region: - Chenge lang by Pressed Key (CLBPK) Global $hCLBPK_Sleep_Timer Global $hCLBPK_Check_Timer = _Timer_SetTimer($hAutoItWin, 10, '_ChengeLang_ByPressedKey') ;~ Timers settings: Global $iCLBPK_Sleep_Time = 250 Global $iCLBPK_Check_Time = 10 #endregion #region: - Sleep, Exit While 1 Sleep(10) WEnd Func _Pro_Exit() Exit EndFunc #endregion Func _ChengeLang_ByPressedKey($hWnd, $Msg, $iIDTimer, $dwTime) Switch $iIDTimer Case $hCLBPK_Sleep_Timer _Timer_KillTimer($hAutoItWin, $hCLBPK_Sleep_Timer) $hCLBPK_Check_Timer = _Timer_SetTimer($hAutoItWin, $iCLBPK_Check_Time, '_ChengeLang_ByPressedKey') Case $hCLBPK_Check_Timer If _IsPressed('5B') Then If _IsPressed('20') Then _ChengeWinLang() _Timer_KillTimer($hAutoItWin, $hCLBPK_Check_Timer) $hCLBPK_Sleep_Timer = _Timer_SetTimer($hAutoItWin, $iCLBPK_Sleep_Time, '_ChengeLang_ByPressedKey') EndIf EndIf EndSwitch EndFunc Func _ChengeWinLang() Local $hWnd $hWnd = WinGetHandle('[Active]') Switch _GetKeyboardLayout($hWnd) Case 'ru' _ChLang('en', $hWnd) Case 'en' _ChLang('ru', $hWnd) EndSwitch EndFunc Func _GetKeyboardLayout($hWnd) Local $iLangCode Local $aRet = DllCall('user32.dll', 'long', 'GetWindowThreadProcessId', 'hwnd', $hWnd, 'ptr', 0) $aRet = DllCall('user32.dll', 'long', 'GetKeyboardLayout', 'long', $aRet[0]) $iLangCode = Hex($aRet[0], 4) Switch $iLangCode Case '0409' return 'en' Case '0419' return 'ru' EndSwitch EndFunc Func _ChLang($iLangCode, $hWnd) If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd) If $iLangCode == 'en' Then _SetKeyboardLayout('00000409', $hWnd) EndFunc 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 |