#SingleInstance Force #Persistent ;; Initialization. ShellApp := ComObjCreate("Shell.Application") us := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1) jp := DllCall("LoadKeyboardLayout", "Str", "00000411", "Int", 1) ;; ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1) ;; sv := DllCall("LoadKeyboardLayout", "Str", "0000041D", "Int", 1) Menu, Tray, Tip, Cfg Menu, Tray, Icon, shell32.dll, 105 GroupAdd, Explorer, ahk_class CabinetWClass GroupAdd, Explorer, ahk_class ExploreWClass GroupAdd, Desktop, ahk_class Progman GroupAdd, Desktop, ahk_class WorkerW Gui +LastFound DllCall("RegisterShellHookWindow", UInt, WinExist()) msg := DllCall("RegisterWindowMessage", Str, "SHELLHOOK") OnMessage(msg, "FixZ") return ;; Fix z-order after minimization. FixZ(wParam, lParam){ static HSHELL_GETMINRECT := 5 static HWND_BOTTOM := 1 static SWP_NOSIZE := 0x0001 static SWP_NOMOVE := 0x0002 static SWP_ASYNCWINDOWPOS := 0x4000 if(wParam = HSHELL_GETMINRECT and WinActive("A") = 0){ hwnd := NumGet(lParam + 0) WinWaitNotActive, ahk_id 0 ; Wait until end of minimization. Sleep, 20 DllCall("SetWindowPos", "UInt", hwnd, "UInt", HWND_BOTTOM , "Int", 0, "Int", 0, "Int", 0, "Int", 0 , "UInt", SWP_NOSIZE | SWP_NOMOVE | SWP_ASYNCWINDOWPOS) } } ;; Window management hotkeys. #o::WinSet, AlwaysOnTop, Toggle, A #z::WinMinimize, A ;; Command prompt hotkeys. #IfWinActive ahk_group Explorer ^p:: WinGet, hwnd, id, A for window in ShellApp.Windows if (window.hwnd = hwnd) window.Document.Application.ShellExecute("cmd" , "/k cd /d """ window.Document.Folder.Self.path """") return #IfWinActive ahk_class ConsoleWindowClass !F4::WinClose, A #IfWinActive ;; Volume hotkeys. RAlt & F6::SetVolume(GetKeyState("Shift") ? 2 : 1) RAlt & F5::SetVolume(GetKeyState("Shift") ? -2 : -1) SetVolume(n){ SoundGet, s s := round(s) + n if (s > 100) s := 100 if (s < 0) s := 0 SoundSet, %s% ToolTip, %s% SetTimer, RemoveToolTip, -100 } RemoveToolTip: ToolTip return ;; Toggle keyboard layout. ^\:: <^>!^SC00C:: if(Layout() == us) new := jp else new := us DllCall("SendMessage", "UInt", WinActive("A"), "UInt", 80, "UInt", 1, "UInt", new) return Layout(){ f := A_FormatInteger SetFormat, Integer, H if (hwnd = "") WinGet, hwnd, id, A thread := DllCall("GetWindowThreadProcessId", "UInt",hwnd, "UInt",0) layout := DllCall("user32.dll\GetKeyboardLayout", "UInt",thread, "UInt") SetFormat, Integer, %f% return layout } ;; Extra keys. #If Layout() == us && !WinActive("ahk_exe VirtualBoxVM.exe") :z*?:aa::å :z*?:ae::ä :z*?:oe::ö :z*?:AA::Å :z*?:AE::Ä :z*?:OE::Ö :z*?:a``::à :z*?:e``::é :z*?:A``::À :z*?:E``::É >!a::SendInput, a >!e::SendInput, e >!+a::SendInput, A >!+e::SendInput, E #If