From 9296af393bd277d7b191ad2ff9d8e64fb2030822 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= <john@ankarstrom.se>
Date: Wed, 15 Dec 2021 02:49:21 +0100
Subject: Add tiny/cfg.ahk

I've grown a bit tired of maintaining such a large script...
---
 tiny/cfg.ahk | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 114 insertions(+)
 create mode 100644 tiny/cfg.ahk

diff --git a/tiny/cfg.ahk b/tiny/cfg.ahk
new file mode 100644
index 0000000..12be889
--- /dev/null
+++ b/tiny/cfg.ahk
@@ -0,0 +1,114 @@
+#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
\ No newline at end of file
-- 
cgit v1.2.3