注:以下两个版本的区别: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
}