#SingleInstance, Force #Include led.ahk IfEqual, A_IsAdmin, % False, Run, % "*RunAs """A_ScriptFullPath """" SetStoreCapslockMode, Off OnExit, % "ExitScript" "".Base.WM_INPUTLANGCHANGEREQUEST:=0x0050, "".Base.INPUTLANGCHANGE_FORWARD:=0x0002 "".Base.HSHELL_WINDOWACTIVATED:=4, "".Base.suffix:=A_IsUnicode ? "W":"A" "".Base.inputLocaleId:=CheckUpLayout() DllCall("RegisterShellHookWindow", "Ptr", A_ScriptHwnd) OnMessage(DllCall("RegisterWindowMessage"("".suffix) , "Str", "SHELLHOOK", "UInt") , "ShellMessage") CapsLock:: ; если всё же нужно родное действие этой клавиши нажимаем с зажатым шифтом SendWindowMessage() KeyWait, % A_ThisHotkey Notify("".Base.inputLocaleId:=CheckUpLayout()) Return ExitScript: DllCall("DeregisterShellHookWindow", "Ptr", A_ScriptHwnd) ExitApp CheckUpLayout() { Return, DllCall("GetKeyboardLayout", "UInt" , DllCall("GetWindowThreadProcessId", "Ptr", WinActive("A"), "UInt*", 0, "UInt") , "Ptr") } Notify(param) { TrayTip, % "Текущая раскладка", % param&16 ? "Русская":"Английская",, 1 Sleep, 1000 TrayTip } SendWindowMessage() { DllCall("SendMessage"("".suffix), "Ptr", WinActive("A") , "UInt", "".WM_INPUTLANGCHANGEREQUEST , "Ptr", "".INPUTLANGCHANGE_FORWARD , "Ptr", 0) } ShellMessage(aParams*) { `(aParams.1="".HSHELL_WINDOWACTIVATED) And (CheckUpLayout()<>"".inputLocaleId) And SendWindowMessage() } |