注:以下两个版本的区别:v2 中 #NoEnv 为默认项不用写、#If 换成了 #HotIf。置顶后窗口设为半透明(部分App自己会修改这个半透明效果为不透明但不影响置顶功能)。
AutoHotkey v2:
#SingleInstance Force #InstallKeybdHook global initialCapsLockState := "" #HotIf GetKeyState("CapsLock", "P") ; 将当前窗口置顶/取消置顶 t:: initialCapsLockState := GetKeyState("CapsLock", "T") isTop := IsWindowTopmost() ; 置顶的同时增加透明度以区分是否被置顶 WinSet("AlwaysOnTop", isTop ? "Off" : "On", "A") WinSet("Transparent", isTop ? 255 : 200, "A") ; 0透明,255不透明 return #HotIf CapsLock Up:: If (initalCapsLockState = "") { SetCapsLockState & !GetKeyState("CapsLock", "T") } initalCapsLockState := "" Return IsWindowTopmost() { activeWindow := WinExist("A") exStyle := DllCall("GetWindowLong", "Ptr", activeWindow, "Int", -20) return (exStyle & 0x00000008) != 0 }
AutoHotkey v1:
#NoEnv #SingleInstance force #InstallKeybdHook #If GetKeyState("CapsLock", "P") t:: initalCapsLockState := GetKeyState("CapsLock", "T") isTop := IsWindowTopmost() WinSet, AlwaysOnTop, % (isTop ? "Off" : "On"), A WinSet, Transparent, % (isTop ? 255 : 200), A ; 置顶的同时增加透明度 0透明,255不透明 Return #If CapsLock Up:: If (initalCapsLockState = "") { SetCapsLockState & !GetKeyState("CapsLock", "T") } initalCapsLockState := "" Return IsWindowTopmost() { activeWindow := WinExist("A") exStyle := DllCall("GetWindowLong", "Ptr", activeWindow, "Int", -20) Return (exStyle & 0x00000008) != 0 }