首页 > 其他分享 >[AHK2] 窗口置顶管理

[AHK2] 窗口置顶管理

时间:2023-08-20 11:45:38浏览次数:44  
标签:wid 窗口 AHK2 ahk state id 置顶

开始


如题,这个脚本是用来设置窗口置顶状态和进行批量管理的。

在实际生活中,窗口置顶还算常用吧~反正我常常烦躁于窗口层级,虽然可以截图置顶,但总归不如直接置顶窗口方便。

于是我早早的便写了类似功能的脚本,只是最近才对其进行功能上的完善和扩展,使使用更人性,更直观。说人话就是更好用了……

话不多说,直接开始正题。

介绍


使用:

  • ^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

相关文章

  • Windows XP Vmware 无法自适应窗口
    之前在吾爱破解上找到一个WindowsXPSP3的精简系统(目前找不到在哪了),自带VMtools和52破解工具包,很适合XP系统下的逆向和病毒分析。目前准备学习一下《恶意代码分析实战》,这本书的实验基于WindowsXP,为了确保实验成功也启动了一下本地存着的XP系统,但是发现VMtools无法自......
  • RDP 端口转发 多窗口运行
    需要设置本机的默认端口进行修改优点:(1)部署简单。Windows自带,支持IPv4和IPv6(2)不用重启机器,还长记性。命令即时生效,重启系统后配置仍然存在.缺点:(1)不支持UDP(2)XP/2003需要先安裝IPV6,Win7以上系统自带.用法:下面都是命令行(1)安装环境支持netshinterfaceipv6install(2)查看已配置的“......
  • windows10 登陆FTP成功后总是打开两个窗口
     具体现象:使用windows资源管理器打开登陆FTP,登陆FTP成功后当前窗口显示此文件夹为空,不在当前窗口显示文件夹内容,却在当前窗口后重新打开了一个资源管理器窗口显示FTP文件夹内容 解决方法:在资源管理器中输入地址时加上用户名,比如ftp://[email protected] ......
  • [WPF]WPF中MVVM模式按下ESC键退出窗口
    首先在XAML中定义监听按键<Window.InputBindings><KeyBindingKey="Esc"Command="{BindingCloseWindowCommand}"CommandParameter="{BindingRelativeSource={RelativeSourceFindAncestor,Ancest......
  • windows下C++获取其它窗口中组件的信息
    抄自:https://pythonjishu.com/xfqbhrlejawmdfh/C++获得其他程序窗体控件中信息是一个比较常见的需求,例如在自动化测试、窗口助手等场景下都有可能用到。下面我们就介绍一下C++获得其他程序窗体控件中信息的方法。安装VisualStudio获得其他程序窗体控件中信息,在Windows下通过Wi......
  • 命令提示符窗口创建VScode
    1、选中文件夹地址栏输入cmd,点击Enter(回车键)进入命令提示符窗口。 2、输入VScode的创建命令vuecreate项目名称,回车。3、进入vue图形化界面,选中手动选择功能,回车。4、手动选择需求Babel:vue项目中普遍使用es6语法,当项目需要兼容低版本时就需要引入babel插件TypeScri......
  • 获取鼠标相对于浏览器窗口坐标
    <!DOCTYPEhtml><html><head><style>div{position:fixed;top:10px;left:10px;padding:10px;background-color:#f1f1f1;border:1pxsolid#cc......
  • 获取Windows窗口
    抄自:  https://blog.csdn.net/freedom2211/article/details/131288406windowIterator.hclassCWindowIterator{private:staticchar*wchar2char(constwchar_t*wchar);staticBOOLCALLBACKEnumWindowsProc(HWNDwindow,LPARAMlParam);public:usingEnumC......
  • 代码随想录算法训练营第十三天|单调数列:滑动窗口最大值(力扣239.)、优先级队列:前k个高
    单调数列:滑动窗口最大值(力扣239.)给定滑动窗口的范围,求每个滑动窗口范围内的最大值使用单调队列实现对于最大值数字前面的数字不存入数列,对于最大值数字后面的数字存入数列中单调队列中数字的大小呈递减顺序pop(value):如果窗口移除的元素等于单调队列的队口元素,则pop;否则什......
  • ElasticSearch置顶方案
    最近系统有个需求,希望工作流的审批人被催办后就要置顶在最前面,工作流列表我是用es的,一开始想用pinned实现,但用pinned的话,每页都会置顶在前面,我的需求只是想让他优先排在前面,翻页后正常显示后面找到这个,通过把匹配到数据的分数提高,然后用sort进行排序,就能实现我的需求了GETwf......