<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[玖伍资源网-专注资源分享]]></title> 
<atom:link href="https://9295w.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[玖伍资源网-专注资源分享]]></description>
<link>https://9295w.cn/</link>
<language>zh-cn</language>

<item>
    <title>高德打车每周领5亓无门槛券</title>
    <link>https://9295w.cn/?post=170</link>
    <description><![CDATA[<p><img title="1775614069117743.jpg" src="https://www.x6g.com/uploads/allimg/260408/1775614069117743.jpg" alt="7128AD40ACD03DEE830F15F04F598ABA.jpg"></p>
<p>&nbsp;</p>
<p>微信打开活动-&gt;直接领5亓无门槛打车券</p>
<p>1、mp://OlHdJPkl4kCEv0I</p>
<p>2、mp://riWQ0j8mym9RqQu</p>
<p>====</p>
<p>高德新人领11-10亓打车券</p>
<p>mp://Tz1SAfnPAgxXYNx</p>
<p>高德每月领取6亓无门槛券</p>
<p>mp://yV0c7A0H5yEJkai</p>
<p>高德打车3次领网易云月卡</p>
<p>mp://4WKZx7KlTFOTLft</p>]]></description>
    <pubDate>Fri, 10 Jul 2026 13:12:13 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=170</guid>
</item>
<item>
    <title>极品工具箱1.4.0免费听音乐/资源嗅探/短视频去水印</title>
    <link>https://9295w.cn/?post=168</link>
    <description><![CDATA[<div class="article-content">
<p><img src="https://www.90nianhua.com/content/uploadfile/202606/ac491782183461.jpg" alt=""><br>【软件名称】: 极品工具箱</p>
<p>【软件版本】：v1</p>
<p>【软件大小】：1m</p>
<p>【官方介绍】：不仅仅可以来在这里来帮助你开启智能生活，并且还能多方面的来提高你的幸福感哦！日历，纪念日，记账，wifi，指南针，已解锁全部功能!</p>
</div>
<div id="down" class="c-title">资源下载</div>
<div class="c-title"><a href="https://zhenniu1.lanzoue.com/iZiq53sp30uf" target="_blank" rel="noopener">https://zhenniu1.lanzoue.com/iZiq53sp30uf</a></div>]]></description>
    <pubDate>Tue, 23 Jun 2026 12:55:09 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=168</guid>
</item>
<item>
    <title>魔方组件盒v1.1.8高级版</title>
    <link>https://9295w.cn/?post=167</link>
    <description><![CDATA[<p><img class="alignnone size-medium" title="魔方组件盒v1.1.8高级版插图" src="https://img.xx8g.com/uploadfile/2026062213006.jpg" alt="魔方组件盒v1.1.8高级版插图" width="1029" height="895" loading="lazy"></p>
<h2>软件介绍</h2>
<p>小米应用商店上架的桌面美化专用工具，一站式整合全套主题、多功能小组件、4K高清静态/动态壁纸资源。</p>
<p>涵盖国风、极简商务、二次元、复古潮玩等多种成套主题，无需ROOT即可一键换装，同步更换图标、锁屏与壁纸；提供多尺寸时钟、日历、照片墙等实用桌面组件，支持拖拽摆放、调节大小与透明度，自由自定义桌面布局。</p>
<p>软件轻量化运行流畅，资源持续更新，自带热门搭配模板，新手可直接套用，兼顾美观与实用性，轻松打造专属高颜*手机桌面。</p>
<p><a href="https://share.feijipan.com/s/XBcrnBij" target="_blank" rel="noopener">https://share.feijipan.com/s/XBcrnBij</a></p>]]></description>
    <pubDate>Tue, 23 Jun 2026 12:55:09 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=167</guid>
</item>
<item>
    <title>音乐魔方v0.1.8清爽版</title>
    <link>https://9295w.cn/?post=166</link>
    <description><![CDATA[<p><img class="alignnone size-medium" title="音乐魔方v0.1.8清爽版插图" src="https://img.xx8g.com/uploadfile/2026062213949.jpg" alt="音乐魔方v0.1.8清爽版插图" width="1035" height="879" loading="lazy"></p>
<h2>软件介绍</h2>
<p>聚合三大音源，免费搜索全网VIP歌曲，支持标准/高品质/无损多档位音质下载，可单独保存歌词、专辑封面。</p>
<p>首页内置各类热门榜单与精选歌单，播放页高斯模糊黑胶界面，滚动歌词显示；自带人声增强、减弱背景声音效调节。</p>
<p>支持导入歌单链接，自定义下载路径、歌词布局，底部迷你播放栏常驻，无广告免费畅听全网曲库。</p>
<p><a href="https://share.feijipan.com/s/EHcrnqFA" target="_blank" rel="noopener">https://share.feijipan.com/s/EHcrnqFA</a></p>]]></description>
    <pubDate>Tue, 23 Jun 2026 12:55:09 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=166</guid>
</item>
<item>
    <title>ZBrush 3D数字雕刻软件2026.2.1 绿色版</title>
    <link>https://9295w.cn/?post=165</link>
    <description><![CDATA[<h3>软件介绍</h3>
<p>ZBrush中文版是一款专业数字雕刻,绘画软件,3D绘图软件.ZBrush2024中文破解版为当代数字艺术家提供了世界上较先进的工具,它以强大的功能和直观的工作流程彻底改变了三维行业,设计师可以自由创作3D动画.</p>
<p>ZBrush为数字雕刻设定了行业标准。 它的强大功能可以让您在实时环境中使用可自定义的画笔来对虚拟粘土进行造型，纹理化和绘制。 使用ZBrush，就相当于你在使用与电影制片厂，游戏开发商，玩具/收藏家，珠宝设计师，汽车/航空设计师，插画家和艺术家相同的工具。 简而言之，ZBrush是艺术家为艺术家创建的一种艺术工具。它允许您创建模型和插图，而这些模型和插图仅受您的想象力限制，其速度可以使您在当今快速发展的行业中脱颖而出。</p>
<h3>软件截图</h3>
<p><img title="1758000793531220.jpg" src="https://www.x6g.com/uploads/allimg/250916/1758000793531220.jpg" alt="1688613392894042.jpg"></p>
<h4>&nbsp;</h4>
<h4>新版变化</h4>
<p>ZBrush 2026 Release Notes&nbsp; &ndash; Knowledge Base</p>
<p>https://support.maxon.net/hc/en-us/sections/7456686788252-ZBrush</p>
<p><strong>ZBrush 2026 新版特性：</strong></p>
<p>支持Python自动化｜建模更顺手｜iPad功能追平桌面｜明年还有UV和重拓扑大招</p>
<p>1. Python脚本支持 &rarr; 终于能用Python自动化重复操作，批量处理模型效率翻倍！</p>
<p>2. ZModeler优化 &rarr; 硬表面建模悬停提示更清晰，插入边环自动折痕，手残党也能精准操作！</p>
<p>3. NoiseMaker升级 &rarr; 程序化噪波支持旋转/缩放Alpha，做表面纹理不用反复调参数！</p>
<p>4. iPad版功能补全 &rarr; 移动端同步桌面版所有工具（ZModeler+NoiseMaker）及3D打印插件！</p>
<p>5. 未来功能预告 &rarr; 明年要上新UV编辑器+重拓扑工具，文件夹结构也要大改（传输文件更方便）！</p>
<h4>系统要求</h4>
<p>Windows 11及更高版64位（ZBrush2023不再支持32位系统）</p>
<p>显卡：必须支持OpenGL3.3或更高版本和Vulkan 1.1或更高版</p>
<p>软件别安装或存放在含中文名的路径，不然启动软件会导致闪退！</p>
<div id="article-down" class="article-down">
<h4>下载地址</h4>
<p><a href="https://1841482710.share.123pan.cn/123pan/db0DTd-wPPg?notoken=1" target="_blank" rel="noopener">https://1841482710.share.123pan.cn/123pan/db0DTd-wPPg?notoken=1</a></p>
</div>]]></description>
    <pubDate>Tue, 23 Jun 2026 12:55:09 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=165</guid>
</item>
<item>
    <title>免费远程工具AnyDesk v9.7.7.0</title>
    <link>https://9295w.cn/?post=164</link>
    <description><![CDATA[<h3>软件介绍</h3>
<p>AnyDesk是一款号称速度最快的免费远程连接/远程桌面控制软件，据说是前 TeamViewer 开发小组人员自立门户的产品，它拥有先进的视频压缩技术 DeskRT， 可轻松穿透防火墙/路由器，实测在电信、移动的跨网宽带环境下，速度确实要比 TeamViewer 和 QQ 流畅。</p>
<h3>软件截图</h3>
<p><img title="1585927117496689.png" src="https://www.x6g.com/uploads/allimg/200403/1585927117496689.png" alt="1.png"></p>
<p><img title="1585927121205196.png" src="https://www.x6g.com/uploads/allimg/200403/1585927121205196.png" alt="2.png"></p>
<h5>更新日志</h5>
<p>download.anydesk.com/changelog.txt</p>
<p>9.x 版本新版特性：</p>
<p>1. 远程操作更牛了</p>
<p>- 单屏变多屏：开会时能同时看对方多个显示器，不用来回切（9.5.0）</p>
<p>- 录屏功能上线：远程操作可以录下来，方便事后检查或甩锅（9.0.0）</p>
<p>- 远程锁电脑/踢人：老板查岗时一键锁屏，还能强制切换用户（9.0.5）</p>
<p>2. 操作界面更好了</p>
<p>- 暗黑模式不瞎眼：黑底白字更清晰，按钮图标更统一（9.x.x）</p>
<p>- 错误提示说人话：连不上网会告诉你原因，不用瞎猜（9.5.2）</p>
<p>- 中文翻译更全：之前乱码的菜单项和按钮现在都汉化了（9.0.3）</p>
<p>3. 卡死崩溃少多了</p>
<p>- 修了一堆闪退：传文件时闪退、切窗口卡死等问题基本解决（9.x.x）</p>
<p>- 登录更安全：双因素认证不再抽风，密码错误提示也更清楚（9.5.2）</p>
<p>4. 自定义更灵活</p>
<p>- 企业定制版自由改：同一版本软件能按公司需求调配置（9.0.0）</p>
<p>- 命令行装逼必备：技术宅用代码就能静默激活许可证（9.0.2）</p>
<div id="article-down" class="article-down">
<h4>下载地址</h4>
<p><a href="https://xiaodao.lanzoui.com/b0dpt5f2f" target="_blank" rel="noopener">https://xiaodao.lanzoui.com/b0dpt5f2f</a></p>
</div>]]></description>
    <pubDate>Tue, 23 Jun 2026 12:55:09 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=164</guid>
</item>
<item>
    <title>招陪聊·不限男女，可兼职，可全职</title>
    <link>https://9295w.cn/?post=163</link>
    <description><![CDATA[<p>招陪聊&middot;不限男女，可兼职，可全职，纯绿色</p>
<p>不限时间，按聊天次数结账，不压佣金</p>
<p>&nbsp;</p>
<p><img src="/content/uploadfile/202606/d9e61782181745.jpg" alt="微信图片_2026-06-23_102622_475 (1).jpg"></p>
<ul>
<li style="color: #e03e2d;"><span style="color: #e03e2d;">兼职----客服微信：miyu0688</span></li>
</ul>
<p>在上列平台中选1个平台进行陪聊，<span style="color: #e03e2d;">缴纳10元的费用（免费的不被珍惜）</span>，每个平台的佣金及玩法不同，具体可联系客服咨询</p>
<p><a href="/content/uploadfile/202606/d2b51782181936.png" target="_blank" rel="noopener"><img src="/content/uploadfile/202606/d2b51782181936.png" alt="image.png" width="219" height="59"></a></p>
<p><a href="/content/uploadfile/202606/d2b51782181936.png" target="_blank" rel="noopener"><img src="/content/uploadfile/202606/d2b51782181964.png" alt="image.png" width="272" height="86"></a></p>
<p><a href="/content/uploadfile/202606/d2b51782181936.png" target="_blank" rel="noopener"><img src="/content/uploadfile/202606/d2b51782181985.png" alt="image.png" width="261" height="105"></a></p>
<p>先写这三个平台的玩法，以上平台均可去入职</p>
<ul>
<li style="color: #e03e2d;"><span style="color: #e03e2d;">全职</span></li>
</ul>
<p><span style="color: #e03e2d;">全职需要缴纳200元费用</span>，上面十几种平台都可以去入职</p>
<ul>
<li style="color: #e03e2d;"><span style="color: #e03e2d;">主理人</span></li>
</ul>
<p><span style="color: #e03e2d;">主理人需要缴纳998的费用</span>，开独立后台，可零成本去招兼职，全职，主理人，独立app管理招聘的店员，佣金更高</p>
<p><span style="font-size: 18px; color: #e03e2d;">客服微信：miyu0688</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
    <pubDate>Tue, 23 Jun 2026 10:23:25 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=163</guid>
</item>
<item>
    <title>网易云音乐v3.1.34.205281绿色版</title>
    <link>https://9295w.cn/?post=162</link>
    <description><![CDATA[<h3>软件介绍</h3>
<p>网易云音乐3.0版是一款专注于发现与分享的音乐产品,依托音乐人,DJ,好友推荐及社交功能,打造全新音乐生活.网易云音乐最大特色是推荐算法和歌曲评论,正版高质量歌单:外语,电音, 纯音乐,ACG等,深受年轻用户喜爱.</p>
<h3>软件截图</h3>
<p><code><img title="1688867702845000.png" src="https://www.x6g.com/uploads/allimg/230709/1688867702845000.png" alt="2023-07-09_095431.png"></code></p>
<h5>更新日志</h5>
<p>v3.1.12 新增音乐桌面功能</p>
<p>网易云音乐PC端3.0版是全新64位版，新版本暂时没有云盘和听歌识曲等功能！</p>
<p>网易云音乐3.0采用现代化UI设计，播放页可以使用动效，而且还能使用自定义壁纸。</p>
<p>但由于新技术的原因，网易云电脑版3.0最新版目前在资源占用方面高于旧版客户端。</p>
<h4>版本特点</h4>
<p>- 逆向修改实现便携化，数据强制保存到根目录CloudMusic\NetEase</p>
<p>- 切断强制升级，无视选项升级开关，禁后续检测升级提示下载安装包</p>
<p>- 删除了多国语言pak包、错误报告程序</p>
<div id="article-down" class="article-down">
<h4>下载地址</h4>
<p><a href="https://xiaodao.lanzout.com/b0dtkw51g" target="_blank" rel="noopener">https://xiaodao.lanzout.com/b0dtkw51g</a></p>
</div>]]></description>
    <pubDate>Fri, 19 Jun 2026 11:00:23 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=162</guid>
</item>
<item>
    <title>摸鱼必备：超级老板键：可以隐藏多个窗口！</title>
    <link>https://9295w.cn/?post=161</link>
    <description><![CDATA[<p>先声明：代码由本人编写，但是由于本人代码编写不太规范，为了方便理解，所以让AI添加注释并且修改函数名</p>
<div class="guestviewthumb"><img id="aimg_47666" class="guestviewthumb_cur" title="摸鱼必备：超级老板键：可以隐藏多个窗口！" src="https://www.xkwo.com/data/attachment/image/000/04/76/66_200_200.jpg" alt="摸鱼必备：超级老板键：可以隐藏多个窗口！" width="200" height="178"><br><br></div>
<p><br><span style="font-size: large;"><strong>介绍</strong></span><br>超级老板键：可以隐藏窗口，一键恢复多个窗口，可以隐藏自身。如图，可以点左下角添加配置，可以添加多个老板键隐藏多个窗口。点击右边&ldquo;捕获&rdquo;可以自定义老板键，配置会保存在当前目录下。隐藏有三个选项，可以自己选择：隐藏老板键自身，隐藏最表层窗口和隐藏指定窗口（要写窗口标题）。配置好后点击&rdquo;启动老板键&ldquo;即可开始使用，有一键恢复窗口。<br>下载链接https://yanhe520.lanzoub.com/b0uma9hkj<br>密码:huuv提供蓝奏云直接下载！<br>备注：因为我设置了无控制台（就是没有黑窗），所以360不知道为啥就报毒，各位不放心可以看看源码，或者自己反编译，spec也在附件中！，。以下内容便于检查人员反编译：python的打包版本："""E:\练手项目\项目3老板键&gt;python --version<br>Python 3.10.8<br>pyinstaller版本E:\练手项目\项目3老板键&gt;pyinstaller -v<br>6.14.2"""<br>问题修复等内容<br>如果遇到问题或者bug可以打开老板键所在目录，底下会有log.txt文件，将文件和你的问题或bug发给我，我看到会处理。如果有其他想要的功能也可以私信我哦！<br><span style="font-size: large;"><strong>源代码：</strong></span></p>
<pre>&nbsp;</pre>
<div id="code_oCa">
<ol class="code_ol_yYv">
<li>import os</li>
<li>import sys</li>
<li><span class="hljs-comment"># ---------- 隐藏控制台黑窗（仅 Windows）----------</span></li>
<li><span class="hljs-keyword">if</span> sys.platform == <span class="hljs-string">"win32"</span>:</li>
<li>&nbsp; &nbsp; import ctypes</li>
<li>&nbsp; &nbsp; ctypes.windll.kernel32.FreeConsole()</li>
<li>&nbsp;</li>
<li>import tkinter as tk</li>
<li>from tkinter import ttk, messagebox</li>
<li>import threading</li>
<li>import queue</li>
<li>import json</li>
<li>import logging</li>
<li>&nbsp;</li>
<li><span class="hljs-comment"># ---------- 依赖库 ----------</span></li>
<li>import keyboard</li>
<li>import pygetwindow as gw</li>
<li>import win32gui</li>
<li>import win32con</li>
<li>import win32event</li>
<li>import win32api</li>
<li>import winerror</li>
<li>&nbsp;</li>
<li><span class="hljs-comment"># ---------- 日志配置（追加模式）----------</span></li>
<li>LOG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file_<span class="hljs-number">_</span>)), <span class="hljs-string">"log.txt"</span>)</li>
<li>logging.basicConfig(</li>
<li>&nbsp; &nbsp; level=logging.INFO,</li>
<li>&nbsp; &nbsp; format=<span class="hljs-string">'%(asctime)s - %(levelname)s - %(message)s'</span>,</li>
<li>&nbsp; &nbsp; handlers=[</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logging.FileHandler(LOG_FILE, mode=<span class="hljs-string">'a'</span>, encoding=<span class="hljs-string">'utf-8'</span>)</li>
<li>&nbsp; &nbsp; ]</li>
<li>)</li>
<li>logger = logging.getLogger(__name_<span class="hljs-number">_</span>)</li>
<li>&nbsp;</li>
<li>CONFIG_FILE = <span class="hljs-string">"bosskey_config.json"</span></li>
<li>&nbsp;</li>
<li><span class="hljs-comment"># ---------- 进程互斥，防止多开 ----------</span></li>
<li>MUTEX_NAME = <span class="hljs-string">"Global\\BossKeyAppMutex"</span></li>
<li>mutex = win32event.CreateMutex(None, False, MUTEX_NAME)</li>
<li><span class="hljs-keyword">if</span> win32api.GetLastError() == winerror.<span class="hljs-symbol">ERROR_ALREADY_EXISTS:</span></li>
<li>&nbsp; &nbsp; logger.warning(<span class="hljs-string">"检测到已有实例运行，退出"</span>)</li>
<li>&nbsp; &nbsp; sys.exit(<span class="hljs-number">0</span>)</li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li><span class="hljs-comment"># ---------------------- 单个隐藏配置项的数据模型 ----------------------</span></li>
<li><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">HideConfigItem</span>:</span></li>
<li>&nbsp; &nbsp; <span class="hljs-string">""</span><span class="hljs-string">" </span></li>
<li><span class="hljs-string">&nbsp; &nbsp; 一个隐藏规则：包含启用状态、类型、快捷键、目标标题，以及运行时隐藏的窗口句柄 </span></li>
<li><span class="hljs-string">&nbsp; &nbsp; "</span><span class="hljs-string">""</span></li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># 内部英文标识</span></li>
<li>&nbsp; &nbsp; HIDE_SELF = <span class="hljs-string">"self"</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-comment"># 隐藏自身窗口</span></li>
<li>&nbsp; &nbsp; HIDE_TOPMOST = <span class="hljs-string">"topmost"</span>&nbsp; &nbsp; <span class="hljs-comment"># 隐藏最表层窗口</span></li>
<li>&nbsp; &nbsp; HIDE_TARGET = <span class="hljs-string">"target"</span>&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-comment"># 隐藏指定标题窗口</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ★ 中文显示映射</span></li>
<li>&nbsp; &nbsp; TYPE_MAP = {</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">HIDE_SELF:</span> <span class="hljs-string">"隐藏自身"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">HIDE_TOPMOST:</span> <span class="hljs-string">"隐藏最表层窗口"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">HIDE_TARGET:</span> <span class="hljs-string">"隐藏指定窗口"</span></li>
<li>&nbsp; &nbsp; }</li>
<li>&nbsp; &nbsp; REVERSE_MAP = {<span class="hljs-symbol">v:</span> k <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> TYPE_MAP.items()}</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, enable=True, hide_type=HIDE_TOPMOST, hotkey=<span class="hljs-string">""</span>, target_title=<span class="hljs-string">""</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.enable = tk.BooleanVar(value=enable)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.hide_type = tk.StringVar(value=hide_type)&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-comment"># 内部英文</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.hotkey = tk.StringVar(value=hotkey)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.target_title = tk.StringVar(value=target_title)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ★ 用于界面显示的中文变量，与 hide_type 自动同步</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.type_display = tk.StringVar(value=<span class="hljs-keyword">self</span>.TYPE_MAP.get(hide_type, <span class="hljs-string">"隐藏最表层窗口"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 当 type_display 变化时，更新 hide_type</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.type_display.trace(<span class="hljs-string">"w"</span>, <span class="hljs-keyword">self</span>._sync_hide_type)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 运行时状态</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.hidden_hwnds = []</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.hidden_self = False</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_sync_hide_type</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, *args)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-string">""</span><span class="hljs-string">"将中文显示值转换为英文内部值"</span><span class="hljs-string">""</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;eng = <span class="hljs-keyword">self</span>.REVERSE_MAP.get(<span class="hljs-keyword">self</span>.type_display.get(), <span class="hljs-keyword">self</span>.HIDE_TOPMOST)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.hide_type.get() != <span class="hljs-symbol">eng:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.hide_type.set(eng)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_hidden_any</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.hide_type.get() == <span class="hljs-keyword">self</span>.<span class="hljs-symbol">HIDE_SELF:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> <span class="hljs-keyword">self</span>.hidden_self</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;elif <span class="hljs-keyword">self</span>.hide_type.get() == <span class="hljs-keyword">self</span>.<span class="hljs-symbol">HIDE_TOPMOST:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> len(<span class="hljs-keyword">self</span>.hidden_hwnds) &gt; <span class="hljs-number">0</span> <span class="hljs-keyword">and</span> win32gui.IsWindow(<span class="hljs-keyword">self</span>.hidden_hwnds[<span class="hljs-number">0</span>])</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> any(win32gui.IsWindow(hwnd) <span class="hljs-keyword">for</span> hwnd <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.hidden_hwnds)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">to_dict</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">return</span> {</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"enable"</span>: <span class="hljs-keyword">self</span>.enable.get(),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"type"</span>: <span class="hljs-keyword">self</span>.hide_type.get(),&nbsp; &nbsp;<span class="hljs-comment"># 保存英文标识</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"hotkey"</span>: <span class="hljs-keyword">self</span>.hotkey.get(),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"target_title"</span>: <span class="hljs-keyword">self</span>.target_title.get()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; @classmethod</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">from_dict</span><span class="hljs-params">(cls, data)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;item = cls(</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;enable=data.get(<span class="hljs-string">"enable"</span>, True),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hide_type=data.get(<span class="hljs-string">"type"</span>, cls.HIDE_TOPMOST),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hotkey=data.get(<span class="hljs-string">"hotkey"</span>, <span class="hljs-string">""</span>),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;target_title=data.get(<span class="hljs-string">"target_title"</span>, <span class="hljs-string">""</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 保证显示与内部值一致</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;item.type_display.set(cls.TYPE_MAP.get(item.hide_type.get(), <span class="hljs-string">"隐藏最表层窗口"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">return</span> item</li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BossKeyApp</span>:</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, root, auto_start=False)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root = root</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.title(<span class="hljs-string">"老板键 v3.0 - 多配置版"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.geometry(<span class="hljs-string">"620x550"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.resizable(True, True)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.protocol(<span class="hljs-string">"WM_DELETE_WINDOW"</span>, <span class="hljs-keyword">self</span>.on_closing)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.auto_start = auto_start</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ---------- 动态配置列表 ----------</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_items = []</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_frames = []</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ---------- 状态 ----------</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.active = False</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.action_queue = queue.Queue()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.registered_hotkeys = set()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.self_hidden = False</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.load_config()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.build_ui()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">auto_start:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.after(<span class="hljs-number">500</span>, <span class="hljs-keyword">self</span>.auto_elevated_start)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.process_queue()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logger.info(<span class="hljs-string">"程序启动"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 界面构建 ----------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">build_ui</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ttk.Label(<span class="hljs-keyword">self</span>.root, text=<span class="hljs-string">"老板键设置（可添加多条规则）"</span>, font=(<span class="hljs-string">"微软雅黑"</span>, <span class="hljs-number">12</span>, <span class="hljs-string">"bold"</span>)).pack(pady=(<span class="hljs-number">10</span>, <span class="hljs-number">5</span>))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ---------- 可滚动的配置列表区域 ----------</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;container = ttk.Frame(<span class="hljs-keyword">self</span>.root)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;container.pack(fill=<span class="hljs-string">"both"</span>, expand=True, padx=<span class="hljs-number">20</span>, pady=<span class="hljs-number">4</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;canvas = tk.Canvas(container, borderwidth=<span class="hljs-number">0</span>, highlightthickness=<span class="hljs-number">0</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;scrollbar = ttk.Scrollbar(container, orient=<span class="hljs-string">"vertical"</span>, command=canvas.yview)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_list_frame = ttk.Frame(canvas)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_list_frame.bind(<span class="hljs-string">"&lt;Configure&gt;"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;lambda <span class="hljs-symbol">e:</span> canvas.configure(scrollregion=canvas.bbox(<span class="hljs-string">"all"</span>)))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;canvas.create_window((<span class="hljs-number">0</span>, <span class="hljs-number">0</span>), window=<span class="hljs-keyword">self</span>.config_list_frame, anchor=<span class="hljs-string">"nw"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;canvas.configure(yscrollcommand=scrollbar.set)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;canvas.pack(side=<span class="hljs-string">"left"</span>, fill=<span class="hljs-string">"both"</span>, expand=True)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;scrollbar.pack(side=<span class="hljs-string">"right"</span>, fill=<span class="hljs-string">"y"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_on_mousewheel</span><span class="hljs-params">(event)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;canvas.yview_scroll(int(-<span class="hljs-number">1</span>*(event.delta/<span class="hljs-number">120</span>)), <span class="hljs-string">"units"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;canvas.bind_all(<span class="hljs-string">"&lt;MouseWheel&gt;"</span>, _on_mousewheel)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._add_config_row(item)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;default_item = HideConfigItem(hide_type=HideConfigItem.HIDE_TOPMOST, hotkey=<span class="hljs-string">"ctrl+shift+f10"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.config_items.append(default_item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._add_config_row(default_item)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ---------- 按钮区 ----------</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;bottom_frame = ttk.Frame(<span class="hljs-keyword">self</span>.root)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;bottom_frame.pack(pady=(<span class="hljs-number">8</span>, <span class="hljs-number">5</span>), fill=<span class="hljs-string">"x"</span>, padx=<span class="hljs-number">20</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_add = ttk.Button(bottom_frame, text=<span class="hljs-string">"添加配置项"</span>, command=<span class="hljs-keyword">self</span>.add_config_item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_add.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">5</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.start_btn = ttk.Button(bottom_frame, text=<span class="hljs-string">"启动老板键"</span>, command=<span class="hljs-keyword">self</span>.start)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.start_btn.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">5</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.stop_btn = ttk.Button(bottom_frame, text=<span class="hljs-string">"停止老板键"</span>, command=<span class="hljs-keyword">self</span>.stop, state=<span class="hljs-string">"disabled"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.stop_btn.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">5</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.recover_all_btn = ttk.Button(bottom_frame, text=<span class="hljs-string">"一键恢复所有</span><a class="relatedlink" href="https://www.xkwo.com/tag-22666.html" target="_blank" rel="nofollow noopener"><span class="hljs-string">隐藏窗口</span></a><span class="hljs-string">"</span>, command=<span class="hljs-keyword">self</span>.recover_all_windows)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.recover_all_btn.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">5</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.status_label = ttk.Label(<span class="hljs-keyword">self</span>.root, text=<span class="hljs-string">"状态：未启动"</span>, foreground=<span class="hljs-string">"gray"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.status_label.pack(pady=(<span class="hljs-number">2</span>, <span class="hljs-number">10</span>))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_add_config_row</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;frame = ttk.Frame(<span class="hljs-keyword">self</span>.config_list_frame)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;frame.pack(fill=<span class="hljs-string">"x"</span>, pady=<span class="hljs-number">3</span>, padx=<span class="hljs-number">2</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 启用复选框</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cb = ttk.Checkbutton(frame, variable=item.enable)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cb.pack(side=<span class="hljs-string">"left"</span>, padx=(<span class="hljs-number">5</span>, <span class="hljs-number">2</span>))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># ★ 类型下拉（显示中文）</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;type_combo = ttk.Combobox(frame, textvariable=item.type_display,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; values=[<span class="hljs-string">"隐藏自身"</span>, <span class="hljs-string">"隐藏最表层窗口"</span>, <span class="hljs-string">"隐藏指定窗口"</span>],</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; state=<span class="hljs-string">"readonly"</span>, width=<span class="hljs-number">14</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;type_combo.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">2</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 快捷键输入框</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;hotkey_entry = ttk.Entry(frame, textvariable=item.hotkey, width=<span class="hljs-number">18</span>, font=(<span class="hljs-string">"Consolas"</span>, <span class="hljs-number">10</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;hotkey_entry.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">2</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 捕获按钮</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_capture = ttk.Button(frame, text=<span class="hljs-string">"捕获"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;command=lambda it=<span class="hljs-symbol">item:</span> <span class="hljs-keyword">self</span>.capture_hotkey(it.hotkey))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_capture.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">2</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 目标标题输入（仅当类型为 target 时显示）</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;title_entry = ttk.Entry(frame, textvariable=item.target_title, width=<span class="hljs-number">20</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;title_label = ttk.Label(frame, text=<span class="hljs-string">"标题:"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">update_title_visibility</span><span class="hljs-params">(*args)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> item.hide_type.get() == HideConfigItem.<span class="hljs-symbol">HIDE_TARGET:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; title_label.pack(side=<span class="hljs-string">"left"</span>, padx=(<span class="hljs-number">10</span>, <span class="hljs-number">2</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; title_entry.pack(side=<span class="hljs-string">"left"</span>, padx=<span class="hljs-number">2</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; title_label.pack_forget()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; title_entry.pack_forget()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;item.hide_type.trace(<span class="hljs-string">"w"</span>, update_title_visibility)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;update_title_visibility()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 删除按钮</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_del = ttk.Button(frame, text=<span class="hljs-string">"删除"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;command=lambda f=frame, it=<span class="hljs-symbol">item:</span> <span class="hljs-keyword">self</span>.delete_config_item(f, it))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;btn_del.pack(side=<span class="hljs-string">"right"</span>, padx=<span class="hljs-number">5</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_frames.append(frame)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">add_config_item</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;new_item = HideConfigItem(hide_type=HideConfigItem.HIDE_TOPMOST, hotkey=<span class="hljs-string">""</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_items.append(new_item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>._add_config_row(new_item)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">delete_config_item</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, frame, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> len(<span class="hljs-keyword">self</span>.config_items) &lt;= <span class="hljs-number">1</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;messagebox.showinfo(<span class="hljs-string">"提示"</span>, <span class="hljs-string">"至少保留一个配置项"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">active:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;messagebox.showwarning(<span class="hljs-string">"提示"</span>, <span class="hljs-string">"请先停止老板键再删除配置"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_items.remove(item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;frame.destroy()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.config_frames.remove(frame)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 一键恢复所有</span><a class="relatedlink" href="https://www.xkwo.com/tag-22666.html" target="_blank" rel="nofollow noopener"><span class="hljs-comment">隐藏窗口</span></a><span class="hljs-comment"> ----------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">recover_all_windows</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;recovered = <span class="hljs-number">0</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.root.state() == <span class="hljs-string">"withdrawn"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.deiconify()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.lift()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.focus_force()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;recovered += <span class="hljs-number">1</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(<span class="hljs-string">"一键恢复：自身窗口已显示"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> item.hide_type.get() == HideConfigItem.<span class="hljs-symbol">HIDE_SELF:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.root.state() == <span class="hljs-string">"withdrawn"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pass</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">for</span> hwnd <span class="hljs-keyword">in</span> item.<span class="hljs-symbol">hidden_hwnds:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> win32gui.IsWindow(hwnd):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;win32gui.ShowWindow(hwnd, win32con.SW_SHOW)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;recovered += <span class="hljs-number">1</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_hwnds.clear()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> item.hide_type.get() == HideConfigItem.<span class="hljs-symbol">HIDE_SELF:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; item.hidden_self = False</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"一键恢复完成，共恢复 {recovered} 个窗口"</span>))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 权限工具 ----------------------</span></li>
<li>&nbsp; &nbsp; @staticmethod</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_admin</span><span class="hljs-params">()</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> ctypes.windll.shell32.IsUserAnAdmin()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">except:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> False</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; @staticmethod</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">run_as_admin</span><span class="hljs-params">()</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> getattr(sys, <span class="hljs-string">'frozen'</span>, False):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ctypes.windll.shell32.ShellExecuteW(None, <span class="hljs-string">"runas"</span>, sys.executable, <span class="hljs-string">'--elevated'</span>, None, <span class="hljs-number">1</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; script = sys.argv[<span class="hljs-number">0</span>]</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; params = f<span class="hljs-string">'"{script}" --elevated'</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ctypes.windll.shell32.ShellExecuteW(None, <span class="hljs-string">"runas"</span>, sys.executable, params, None, <span class="hljs-number">1</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;except Exception as <span class="hljs-symbol">e:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.error(f<span class="hljs-string">"请求管理员权限失败: {e}"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">auto_elevated_start</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logger.info(<span class="hljs-string">"以管理员权限静默启动老板键"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.start()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">active:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.withdraw()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(<span class="hljs-string">"窗口已隐藏，后台监听热键"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 每个配置项的切换逻辑 ----------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">toggle_by_item</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;t = item.hide_type.get()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> t == HideConfigItem.<span class="hljs-symbol">HIDE_SELF:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._toggle_self(item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;elif t == HideConfigItem.<span class="hljs-symbol">HIDE_TOPMOST:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._toggle_topmost(item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;elif t == HideConfigItem.<span class="hljs-symbol">HIDE_TARGET:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._toggle_target(item)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_toggle_self</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.root.state() == <span class="hljs-string">"withdrawn"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.deiconify()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.lift()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.focus_force()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_self = False</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"自身窗口已显示"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(<span class="hljs-string">"自身窗口已显示"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.withdraw()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_self = True</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"自身窗口已隐藏"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(<span class="hljs-string">"自身窗口已隐藏"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_toggle_topmost</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> item.hidden_hwnds <span class="hljs-keyword">and</span> win32gui.IsWindow(item.hidden_hwnds[<span class="hljs-number">0</span>]):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hwnd = item.hidden_hwnds[<span class="hljs-number">0</span>]</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;win32gui.ShowWindow(hwnd, win32con.SW_SHOW)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;title = win32gui.GetWindowText(hwnd)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_hwnds.clear()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"已恢复窗口：{title}"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(f<span class="hljs-string">"恢复最表层窗口：{title}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hwnd = win32gui.GetForegroundWindow()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-symbol">hwnd:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; title = win32gui.GetWindowText(hwnd)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> hwnd == <span class="hljs-keyword">self</span>.root.winfo_id():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"不能隐藏自身窗口，请使用自身隐藏规则"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">return</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; win32gui.ShowWindow(hwnd, win32con.SW_HIDE)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; item.hidden_hwnds = [hwnd]</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"已隐藏窗口：{title}"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"隐藏最表层窗口：{title}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"未找到前台窗口"</span>))</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_toggle_target</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, item)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> item.<span class="hljs-symbol">hidden_hwnds:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;restored = <span class="hljs-number">0</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">for</span> hwnd <span class="hljs-keyword">in</span> item.<span class="hljs-symbol">hidden_hwnds:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> win32gui.IsWindow(hwnd):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;win32gui.ShowWindow(hwnd, win32con.SW_SHOW)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;restored += <span class="hljs-number">1</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_hwnds.clear()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"已显示 {restored} 个窗口"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(f<span class="hljs-string">"目标窗口已恢复，数量: {restored}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;title = item.target_title.get().strip()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-symbol">title:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"请填写目标窗口标题关键字！"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.warning(<span class="hljs-string">"目标隐藏：标题为空"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">return</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;matches = gw.getWindowsWithTitle(title)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-symbol">matches:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"未找到包含 '{title}' 的窗口"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"未找到匹配窗口: {title}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">return</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;hidden = <span class="hljs-number">0</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">for</span> win <span class="hljs-keyword">in</span> <span class="hljs-symbol">matches:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> win.<span class="hljs-symbol">visible:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;win.hide()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;item.hidden_hwnds.append(win._hWnd)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;hidden += <span class="hljs-number">1</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-symbol">hidden:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"已隐藏 {hidden} 个窗口"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"隐藏目标窗口: {title}，数量: {hidden}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"没有可见的匹配窗口需要隐藏"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"没有可见的匹配窗口: {title}"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 热键注册（基于配置列表）---------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_start_hotkeys</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;registered = set()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> item.enable.get():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;continue</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hk = item.hotkey.get().strip()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-symbol">hk:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;continue</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;keyboard.remove_hotkey(hk)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-symbol">except:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;pass</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; keyboard.add_hotkey(hk, lambda it=<span class="hljs-symbol">item:</span> <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"toggle_item"</span>, it)))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; registered.add(hk)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"注册热键: {hk} (类型: {item.hide_type.get()})"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.registered_hotkeys = registered</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> True</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;except Exception as <span class="hljs-symbol">e:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.error(f<span class="hljs-string">"注册热键失败: {e}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span> False</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_stop_hotkeys</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> hk <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">registered_hotkeys:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; keyboard.remove_hotkey(hk)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">except:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; pass</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.registered_hotkeys.clear()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">for</span> hwnd <span class="hljs-keyword">in</span> item.<span class="hljs-symbol">hidden_hwnds:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> win32gui.IsWindow(hwnd):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;win32gui.ShowWindow(hwnd, win32con.SW_SHOW)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;item.hidden_hwnds.clear()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> item.hide_type.get() == HideConfigItem.<span class="hljs-symbol">HIDE_SELF:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; item.hidden_self = False</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.root.state() == <span class="hljs-string">"withdrawn"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.root.deiconify()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.active = False</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.start_btn.config(state=<span class="hljs-string">"normal"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.stop_btn.config(state=<span class="hljs-string">"disabled"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.status_label.config(text=<span class="hljs-string">"状态：已停止"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logger.info(<span class="hljs-string">"老板键已停止"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">start</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">active:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;messagebox.showinfo(<span class="hljs-string">"提示"</span>, <span class="hljs-string">"老板键已启动，无需重复操作"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;valid = False</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">config_items:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> item.enable.get() <span class="hljs-keyword">and</span> item.hotkey.get().strip():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; valid = True</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">break</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-symbol">valid:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;messagebox.showwarning(<span class="hljs-string">"提示"</span>, <span class="hljs-string">"请至少启用一个配置项并设置快捷键！"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">return</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">self</span>.is_admin():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> messagebox.askyesno(<span class="hljs-string">"权限提示"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"注册全局热键通常需要管理员权限，否则可能无效。\n是否继续尝试启动？"</span>):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">return</span></li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>._start_hotkeys():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.active = True</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.start_btn.config(state=<span class="hljs-string">"disabled"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.stop_btn.config(state=<span class="hljs-string">"normal"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.status_label.config(text=<span class="hljs-string">"状态：已启动（老板键生效）"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.save_config()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.info(<span class="hljs-string">"老板键已启动"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">self</span>.is_admin():</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> messagebox.askyesno(<span class="hljs-string">"需要管理员权限"</span>,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-string">"注册全局热键失败。是否以管理员身份重新启动程序？"</span>):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.save_config()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.run_as_admin()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.destroy()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sys.exit(<span class="hljs-number">0</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;messagebox.showinfo(<span class="hljs-string">"取消"</span>, <span class="hljs-string">"老板键未启动。"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; messagebox.showerror(<span class="hljs-string">"错误"</span>, <span class="hljs-string">"热键注册失败，请检查快捷键是否被占用。"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">stop</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"stop"</span>,))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.status_label.config(text=<span class="hljs-string">"状态：已停止"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">on_closing</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> <span class="hljs-keyword">self</span>.<span class="hljs-symbol">active:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>._stop_hotkeys()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logger.info(<span class="hljs-string">"程序退出"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.destroy()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 快捷键捕获与队列 ----------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">capture_hotkey</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, var)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_capture</span><span class="hljs-params">()</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, <span class="hljs-string">"请按下组合键..."</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hotkey_str = keyboard.read_hotkey(suppress=False)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"update_hotkey"</span>, var, hotkey_str))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(f<span class="hljs-string">"捕获快捷键: {hotkey_str}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;except Exception as <span class="hljs-symbol">e:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">self</span>.action_queue.put((<span class="hljs-string">"status"</span>, f<span class="hljs-string">"捕获失败: {e}"</span>))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.error(f<span class="hljs-string">"捕获快捷键失败: {e}"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;threading.Thread(target=_capture, daemon=True).start()</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process_queue</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">while</span> <span class="hljs-symbol">True:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; cmd = <span class="hljs-keyword">self</span>.action_queue.get_nowait()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> cmd[<span class="hljs-number">0</span>] == <span class="hljs-string">"status"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.status_label.config(text=cmd[<span class="hljs-number">1</span>])</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; elif cmd[<span class="hljs-number">0</span>] == <span class="hljs-string">"update_hotkey"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-number">_</span>, var, value = cmd</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var.set(value)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; elif cmd[<span class="hljs-number">0</span>] == <span class="hljs-string">"toggle_item"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;item = cmd[<span class="hljs-number">1</span>]</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.toggle_by_item(item)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; elif cmd[<span class="hljs-number">0</span>] == <span class="hljs-string">"stop"</span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>._stop_hotkeys()</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;except queue.<span class="hljs-symbol">Empty:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;pass</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">self</span>.root.after(<span class="hljs-number">100</span>, <span class="hljs-keyword">self</span>.process_queue)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-comment"># ---------------------- 配置持久化 ----------------------</span></li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">save_config</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;data = [item.to_dict() <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> <span class="hljs-keyword">self</span>.config_items]</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;with open(CONFIG_FILE, <span class="hljs-string">"w"</span>, encoding=<span class="hljs-string">"utf-8"</span>) as <span class="hljs-symbol">f:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; json.dump(data, f, ensure_ascii=False, indent=<span class="hljs-number">2</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.debug(<span class="hljs-string">"配置已保存"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;except Exception as <span class="hljs-symbol">e:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;logger.error(f<span class="hljs-string">"保存配置失败: {e}"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp; &nbsp; <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">load_config</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> os.path.exists(CONFIG_FILE):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-symbol">try:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; with open(CONFIG_FILE, <span class="hljs-string">"r"</span>, encoding=<span class="hljs-string">"utf-8"</span>) as <span class="hljs-symbol">f:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;data = json.load(f)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-keyword">if</span> isinstance(data, list):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">for</span> item_data <span class="hljs-keyword">in</span> <span class="hljs-symbol">data:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.config_items.append(HideConfigItem.from_dict(item_data))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <span class="hljs-symbol">else:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-comment"># 兼容旧版单个配置</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;logger.info(<span class="hljs-string">"检测到旧版配置，正在转换..."</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;old = data</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> old.get(<span class="hljs-string">"enable_self"</span>):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.config_items.append(HideConfigItem(</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; enable=True, hide_type=HideConfigItem.HIDE_SELF,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hotkey=old.get(<span class="hljs-string">"self_hotkey"</span>, <span class="hljs-string">"ctrl+shift+f9"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> old.get(<span class="hljs-string">"enable_topmost"</span>):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.config_items.append(HideConfigItem(</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; enable=True, hide_type=HideConfigItem.HIDE_TOPMOST,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hotkey=old.get(<span class="hljs-string">"topmost_hotkey"</span>, <span class="hljs-string">"ctrl+shift+f11"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<span class="hljs-keyword">if</span> old.get(<span class="hljs-string">"enable_target"</span>):</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<span class="hljs-keyword">self</span>.config_items.append(HideConfigItem(</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; enable=True, hide_type=HideConfigItem.HIDE_TARGET,</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hotkey=old.get(<span class="hljs-string">"target_hotkey"</span>, <span class="hljs-string">"ctrl+shift+f10"</span>),</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; target_title=old.get(<span class="hljs-string">"target_title"</span>, <span class="hljs-string">""</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;))</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.info(<span class="hljs-string">"已加载历史配置"</span>)</li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;except Exception as <span class="hljs-symbol">e:</span></li>
<li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logger.error(f<span class="hljs-string">"加载配置失败: {e}"</span>)</li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li><span class="hljs-comment"># ---------------------- 主入口 ----------------------</span></li>
<li><span class="hljs-keyword">if</span> __name_<span class="hljs-number">_</span> == <span class="hljs-string">"__main__"</span>:</li>
<li>&nbsp; &nbsp; auto_mode = <span class="hljs-string">"--elevated"</span> <span class="hljs-keyword">in</span> sys.argv</li>
<li>&nbsp; &nbsp; root = tk.Tk()</li>
<li>&nbsp; &nbsp; app = BossKeyApp(root, auto_start=auto_mode)</li>
<li>&nbsp; &nbsp; root.mainloop()</li>
</ol>
</div>
<pre><code class="hljs ruby"><em id="study_codehighlight_btn" class="study_codehighlight_btn" data-clipboard-action="copy" data-clipboard-target="#code_oCa">复制代码</em></code></pre>]]></description>
    <pubDate>Fri, 19 Jun 2026 10:57:12 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=161</guid>
</item>
<item>
    <title>新手剪辑师的福音！超实用的短视频封面模板PSD源文件</title>
    <link>https://9295w.cn/?post=160</link>
    <description><![CDATA[<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_41338" class="t_f">
<div class="attach_nopermission attach_tips">&nbsp;</div>
<div align="left">抖音快手视频封面模板psd源文件、<br>需要用电脑PS软件修改文字跟图片<br>带就字体文件以及png透明框框，png透明框框用于手机剪眏使用、</div>
什么是封面模板：
<div align="left">封面模板是短视频平台的视频封面（如抖音、快手、视频号等）<br>封面模板有什么用呢？封面可以让你的短视频平台主页视频封面统一<br>封面模板是PSD格式的，需用电脑PS软件修改<br>剪映用的模板，文字只能在剪映内打，不能使用模板同款文字</div>
<div class="guestviewthumb"><img id="aimg_47687" class="guestviewthumb_cur" title="新手剪辑师的福音！超实用的短视频封面模板PSD源文件" src="https://www.xkwo.com/data/attachment/image/000/04/76/87_200_200.jpg" alt="新手剪辑师的福音！超实用的短视频封面模板PSD源文件" width="184" height="200"></div>
<br>下载地址：https://pan.quark.cn/s/ebbd5bf439d7</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>]]></description>
    <pubDate>Fri, 19 Jun 2026 10:57:12 +0800</pubDate>
    <dc:creator>玖伍</dc:creator>
    <guid>https://9295w.cn/?post=160</guid>
</item>
</channel>
</rss>