开始
如题,这个脚本是用来设置窗口置顶状态和进行批量管理的。
在实际生活中,窗口置顶还算常用吧~反正我常常烦躁于窗口层级,虽然可以截图置顶,但总归不如直接置顶窗口方便。
于是我早早的便写了类似功能的脚本,只是最近才对其进行功能上的完善和扩展,使使用更人性,更直观。说人话就是更好用了……
话不多说,直接开始正题。
介绍
使用:
- ^Pause: 切换当前窗口置顶状态。
- +^Pause:取消所有窗口置顶。
这是暴露出的两个方法,另外还可以获取置顶窗口列表,如果想要的话。
脚本
依旧使用了先前分享的
常用的ToolTip
脚本哦,作用是显示提示并在几秒后关闭它。
代码
包括静态变量:
- state -> 存储置顶窗口的id
和三个静态方法:
- SetTop -> 切换当前窗口置顶状态。
- GetTopWinList -> 获取置顶窗口列表。
- CancelAll -> 取消所有置顶窗口。
逻辑并不复杂,只是要注意错误预防和处理,不过我已经做好啦。
class WinTopCtrl {
static state := Map()
static SetTop(wid) {
; DetectHiddenWindows(1)
if not WinExist('ahk_id' wid) {
Tip.ShowTip('该窗口不存在')
return
}
if WinTopCtrl.state.Has(wid) {
isTop := false
WinTopCtrl.state.Delete(wid)
}
else {
isTop := true
WinTopCtrl.state.Set(wid, true)
}
WinSetAlwaysOnTop(-1, 'ahk_id' wid)
title := Trim(WinGetTitle('ahk_id' wid))
raw := '[ ' (title || WinGetClass('ahk_id' wid)) ' ] '
. (isTop ? '置顶' : '取消置顶')
. '了喵~☆'
. WinTopCtrl.GetTopWinList(wid)
Tip.ShowTip(raw)
}
static GetTopWinList(wid) {
; if no top window ,ruturn
if not this.state.Count
return ''
for k in this.state {
; skip closed window
if not WinExist('ahk_id' k)
continue
; skip current window
if k = wid
continue
titleList .= '`n- [ ' WinGetTitle('ahk_id' k) ' ]'
}
return IsSet(titleList) && '`n此外置顶还有' titleList || ''
}
static CancelAll() {
if not this.state.Count
return
for k in this.state {
try
WinSetAlwaysOnTop 0, 'ahk_id' k
catch
errInfo := 'Some of the window is closed'
}
this.state := Map()
Tip.ShowTip('取消所有置顶了喵~' (IsSet(errInfo) && '`n但是-->' errInfo || ''))
}
}
热键
^SC146:: WinTopCtrl.SetTop(WinGetID('A')) ; ^Pause
^+SC146:: WinTopCtrl.CancelAll()
标签:wid,窗口,AHK2,ahk,state,id,置顶
From: https://www.cnblogs.com/refiz/p/17643780.html