首页
活动资讯
绿色软件
AI软件
影视软件
电脑软件
安卓软件
值得一看
游戏资讯
精品游戏
影视分享
搜索
炫梦陪玩系统
注册会员
登录
搜索
玖伍
累计撰写
167
篇文章
累计收到
1
条评论
首页
活动资讯
绿色软件
- AI软件
- 影视软件
- 电脑软件
- 安卓软件
值得一看
- 游戏资讯
- 精品游戏
- 影视分享
四网流量卡
最新文章
限时注册会员只需68元
2026-6-23
置顶
招陪聊·不限男女,可兼职,可全职
招陪聊·不限男女,可兼职,可全职,纯绿色 不限时间,按聊天次数结账,不压佣金 兼职----客服微信:miyu0688 在上列平台中选1个平台进行陪聊,缴纳10元的费用(免费的不被珍惜),每个平台的佣金及玩法不同,具体可联系客服咨询 先写这三个平台的玩法,以上平台均可去入职 全职 全职需要缴纳200元费用,上面十几种平台都可以去入职 主理人 主理人需要缴纳998的费用,开独立后台,可零成本去招兼职,全职,主理人,独立app管理招聘的店员,佣金更高 客服微信:miyu0688
2026年-6月-23日
27 阅读
0 评论
2026-1-29
置顶
玖伍影视TV版/安卓版
TV版 下载就送3天VIP,无限提卡仅需128,高清4K无广告,年底家人看影视必备!!! 联系客服QQ:27761258
2026年-1月-29日
482 阅读
0 评论
影视软件
2026-1-20
置顶
炫梦护航游戏代练系支持APP/h5三角州电竞护航游戏代练,新一代陪玩护航系统
点击进入炫梦电竞三角洲 上面是已在运营中的站点,做的是三角洲行动护航+陪玩 不管你们是想做护航陪玩还是树洞陪聊,我们都提供员工对接,让你们到手即可运营 大神/陪练端技能资质认证:上传段位图、语音条、个人主页背景。多品类接单:王者、吃鸡、LOL等游戏分类独立开关。价格自定义:大神可自主设置每局/每小时的服务价格。接单大厅:“抢模式”与“派单模式”自由切换。接单开关:一键开启/关闭接单状态,隐身/在线。 老板/用户端极速下单:发布需求(段位/声音/性别),系统智能匹配。大神列表:按热度、价格、新人、距离多维度筛选。点单流程:选择大神 -> 选规格 -> 支付 -> 开评价系统:服务结束后打分、匿名评价、标签评价。钱包充值:微信/支付宝充值,余额明细查询。 IM即时通讯Workerman内核:高性能Socket长连接,消息秒达。多媒体聊天:支持文字、表情、图片、语音消息。礼物赠送:聊天页面直接赠送虚拟礼物,酷炫特效。动态广场:发布图文动态,点赞、评论、关注互动。消息推送:订单状态变更、私信消息APP内/外部通知。 营销与裂变分销推广:生成专属邀请海报,邀请好友注册消费返佣。优惠券系统:满减券、折扣券、新人注册自动发券。会员VIP:购买VIP享受下单折扣、专属标识、每日礼包。首单优惠:新用户首单立减配置,提高转化率。排行榜:土豪榜、魅力榜、接单榜,刺激消费欲望。 财务与安全实名认证:对接三方接口,确保大神身份真实性。提现管理:支持提现到微信/支付宝/银行卡,后台审核。资金流水:每一笔充值、消费、退款、佣金明细可查。仲裁维权:订单争议时用户可申请仲裁,管理员介入判定。敏感词过滤:聊天、昵称、简介自动过滤违规词汇。 总控管理后台数据看板:今日新增、GMV、活跃用户、订单走势图。内容审核:大神相册、语音条、动态内容人工/自动审核。品类配置:自定义添加游戏、图标、段位要求、价格区间。系统配置:APP版本更新、启动图、客服链接、协议管理。权限管理:EasyAdmin RBAC权限控制,分配员工账号。 硬核技术架构 (Technical Stack)我们在技术选型上追求性能与二开便利性,确保服务端 (Backend):核心客户端 (Frontend):跨端框架: uniapp + vue3 —— 一套代码编译iOS、Android、H5、微信小程序,节省开发成本。UI 组 核心功能模块详解 用户端 (老板/下单方) —— 下单体验让用户快速找到心仪的大神,提升转化率。 技能/游戏大厅: 支持LOL、王者荣耀、和平精英、云顶 极速下单/派单:点单模式: 浏览大神主页,直接选择服 实时IM聊天: 基于Workerman开发的私信系 动态/社区圈子: 用户与大神均可发布图文动态,点赞评论互动,增加用户粘性(类似朋友大神端 (接单方) —— 完善的接单变现闭环赋能大神,提供便捷的接单工具。 入驻与认证: 完善的实名认证流程(身份证/人脸识别接口可接),技能 接单管理 收益中心: 清晰的收益报表(今日/本月收益),支持提现到微信/支付宝/ 语音相册: 支持上传平台运营管理端 (Admin) —— 强大的全局掌控基于EasyAdmin打造,可视化数据大屏,运营尽在掌握。 数据仪表盘: 审核与:内容审核: 动态圈子、头像、昵称违规监控。提现审核: 财务人员 订单管理: 全局查看平台所有订单状态(进行中/已完成/退款/仲裁),支持后台 系统配置:费率设置: 自定义平台抽成比例(如大神赚100 核心文件加密,甚至这就留有后门 特别功能亮点 (针对护航/场景优化)虚拟号码/隐私保护: (可拓展) 支持接多人语音厅 (扩展性): 系统架构支持扩展聊天室/语音厅功能,增加礼物打赏变现渠道邀请裂变: 完善的分销邀请机制,
2026年-1月-20日
10662 阅读
0 评论
值得一看
2026-6-23
极品工具箱1.4.0免费听音乐/资源嗅探/短视频去水印
【软件名称】: 极品工具箱 【软件版本】:v1 【软件大小】:1m 【官方介绍】:不仅仅可以来在这里来帮助你开启智能生活,并且还能多方面的来提高你的幸福感哦!日历,纪念日,记账,wifi,指南针,已解锁全部功能! 资源下载 https://zhenniu1.lanzoue.com/iZiq53sp30uf
2026年-6月-23日
5 阅读
0 评论
安卓软件
2026-6-23
魔方组件盒v1.1.8高级版
软件介绍 小米应用商店上架的桌面美化专用工具,一站式整合全套主题、多功能小组件、4K高清静态/动态壁纸资源。 涵盖国风、极简商务、二次元、复古潮玩等多种成套主题,无需ROOT即可一键换装,同步更换图标、锁屏与壁纸;提供多尺寸时钟、日历、照片墙等实用桌面组件,支持拖拽摆放、调节大小与透明度,自由自定义桌面布局。 软件轻量化运行流畅,资源持续更新,自带热门搭配模板,新手可直接套用,兼顾美观与实用性,轻松打造专属高颜*手机桌面。 https://share.feijipan.com/s/XBcrnBij
2026年-6月-23日
5 阅读
0 评论
安卓软件
2026-6-23
音乐魔方v0.1.8清爽版
软件介绍 聚合三大音源,免费搜索全网VIP歌曲,支持标准/高品质/无损多档位音质下载,可单独保存歌词、专辑封面。 首页内置各类热门榜单与精选歌单,播放页高斯模糊黑胶界面,滚动歌词显示;自带人声增强、减弱背景声音效调节。 支持导入歌单链接,自定义下载路径、歌词布局,底部迷你播放栏常驻,无广告免费畅听全网曲库。 https://share.feijipan.com/s/EHcrnqFA
2026年-6月-23日
5 阅读
0 评论
安卓软件
2026-6-23
ZBrush 3D数字雕刻软件2026.2.1 绿色版
软件介绍 ZBrush中文版是一款专业数字雕刻,绘画软件,3D绘图软件.ZBrush2024中文破解版为当代数字艺术家提供了世界上较先进的工具,它以强大的功能和直观的工作流程彻底改变了三维行业,设计师可以自由创作3D动画. ZBrush为数字雕刻设定了行业标准。 它的强大功能可以让您在实时环境中使用可自定义的画笔来对虚拟粘土进行造型,纹理化和绘制。 使用ZBrush,就相当于你在使用与电影制片厂,游戏开发商,玩具/收藏家,珠宝设计师,汽车/航空设计师,插画家和艺术家相同的工具。 简而言之,ZBrush是艺术家为艺术家创建的一种艺术工具。它允许您创建模型和插图,而这些模型和插图仅受您的想象力限制,其速度可以使您在当今快速发展的行业中脱颖而出。 软件截图 新版变化 ZBrush 2026 Release Notes – Knowledge Base https://support.maxon.net/hc/en-us/sections/7456686788252-ZBrush ZBrush 2026 新版特性: 支持Python自动化|建模更顺手|iPad功能追平桌面|明年还有UV和重拓扑大招 1. Python脚本支持 → 终于能用Python自动化重复操作,批量处理模型效率翻倍! 2. ZModeler优化 → 硬表面建模悬停提示更清晰,插入边环自动折痕,手残党也能精准操作! 3. NoiseMaker升级 → 程序化噪波支持旋转/缩放Alpha,做表面纹理不用反复调参数! 4. iPad版功能补全 → 移动端同步桌面版所有工具(ZModeler+NoiseMaker)及3D打印插件! 5. 未来功能预告 → 明年要上新UV编辑器+重拓扑工具,文件夹结构也要大改(传输文件更方便)! 系统要求 Windows 11及更高版64位(ZBrush2023不再支持32位系统) 显卡:必须支持OpenGL3.3或更高版本和Vulkan 1.1或更高版 软件别安装或存放在含中文名的路径,不然启动软件会导致闪退! 下载地址 https://1841482710.share.123pan.cn/123pan/db0DTd-wPPg?notoken=1
2026年-6月-23日
3 阅读
0 评论
电脑软件
2026-6-23
免费远程工具AnyDesk v9.7.7.0
软件介绍 AnyDesk是一款号称速度最快的免费远程连接/远程桌面控制软件,据说是前 TeamViewer 开发小组人员自立门户的产品,它拥有先进的视频压缩技术 DeskRT, 可轻松穿透防火墙/路由器,实测在电信、移动的跨网宽带环境下,速度确实要比 TeamViewer 和 QQ 流畅。 软件截图 更新日志 download.anydesk.com/changelog.txt 9.x 版本新版特性: 1. 远程操作更牛了 - 单屏变多屏:开会时能同时看对方多个显示器,不用来回切(9.5.0) - 录屏功能上线:远程操作可以录下来,方便事后检查或甩锅(9.0.0) - 远程锁电脑/踢人:老板查岗时一键锁屏,还能强制切换用户(9.0.5) 2. 操作界面更好了 - 暗黑模式不瞎眼:黑底白字更清晰,按钮图标更统一(9.x.x) - 错误提示说人话:连不上网会告诉你原因,不用瞎猜(9.5.2) - 中文翻译更全:之前乱码的菜单项和按钮现在都汉化了(9.0.3) 3. 卡死崩溃少多了 - 修了一堆闪退:传文件时闪退、切窗口卡死等问题基本解决(9.x.x) - 登录更安全:双因素认证不再抽风,密码错误提示也更清楚(9.5.2) 4. 自定义更灵活 - 企业定制版自由改:同一版本软件能按公司需求调配置(9.0.0) - 命令行装逼必备:技术宅用代码就能静默激活许可证(9.0.2) 下载地址 https://xiaodao.lanzoui.com/b0dpt5f2f
2026年-6月-23日
4 阅读
0 评论
电脑软件
2026-6-19
网易云音乐v3.1.34.205281绿色版
软件介绍 网易云音乐3.0版是一款专注于发现与分享的音乐产品,依托音乐人,DJ,好友推荐及社交功能,打造全新音乐生活.网易云音乐最大特色是推荐算法和歌曲评论,正版高质量歌单:外语,电音, 纯音乐,ACG等,深受年轻用户喜爱. 软件截图 更新日志 v3.1.12 新增音乐桌面功能 网易云音乐PC端3.0版是全新64位版,新版本暂时没有云盘和听歌识曲等功能! 网易云音乐3.0采用现代化UI设计,播放页可以使用动效,而且还能使用自定义壁纸。 但由于新技术的原因,网易云电脑版3.0最新版目前在资源占用方面高于旧版客户端。 版本特点 - 逆向修改实现便携化,数据强制保存到根目录CloudMusic\NetEase - 切断强制升级,无视选项升级开关,禁后续检测升级提示下载安装包 - 删除了多国语言pak包、错误报告程序 下载地址 https://xiaodao.lanzout.com/b0dtkw51g
2026年-6月-19日
20 阅读
0 评论
电脑软件
2026-6-19
摸鱼必备:超级老板键:可以隐藏多个窗口!
先声明:代码由本人编写,但是由于本人代码编写不太规范,为了方便理解,所以让AI添加注释并且修改函数名 介绍超级老板键:可以隐藏窗口,一键恢复多个窗口,可以隐藏自身。如图,可以点左下角添加配置,可以添加多个老板键隐藏多个窗口。点击右边“捕获”可以自定义老板键,配置会保存在当前目录下。隐藏有三个选项,可以自己选择:隐藏老板键自身,隐藏最表层窗口和隐藏指定窗口(要写窗口标题)。配置好后点击”启动老板键“即可开始使用,有一键恢复窗口。下载链接https://yanhe520.lanzoub.com/b0uma9hkj密码:huuv提供蓝奏云直接下载!备注:因为我设置了无控制台(就是没有黑窗),所以360不知道为啥就报毒,各位不放心可以看看源码,或者自己反编译,spec也在附件中!,。以下内容便于检查人员反编译:python的打包版本:"""E:\练手项目\项目3老板键>python --versionPython 3.10.8pyinstaller版本E:\练手项目\项目3老板键>pyinstaller -v6.14.2"""问题修复等内容如果遇到问题或者bug可以打开老板键所在目录,底下会有log.txt文件,将文件和你的问题或bug发给我,我看到会处理。如果有其他想要的功能也可以私信我哦!源代码: import os import sys # ---------- 隐藏控制台黑窗(仅 Windows)---------- if sys.platform == "win32": import ctypes ctypes.windll.kernel32.FreeConsole() import tkinter as tk from tkinter import ttk, messagebox import threading import queue import json import logging # ---------- 依赖库 ---------- import keyboard import pygetwindow as gw import win32gui import win32con import win32event import win32api import winerror # ---------- 日志配置(追加模式)---------- LOG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "log.txt") logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(LOG_FILE, mode='a', encoding='utf-8') ] ) logger = logging.getLogger(__name__) CONFIG_FILE = "bosskey_config.json" # ---------- 进程互斥,防止多开 ---------- MUTEX_NAME = "Global\\BossKeyAppMutex" mutex = win32event.CreateMutex(None, False, MUTEX_NAME) if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS: logger.warning("检测到已有实例运行,退出") sys.exit(0) # ---------------------- 单个隐藏配置项的数据模型 ---------------------- class HideConfigItem: """ 一个隐藏规则:包含启用状态、类型、快捷键、目标标题,以及运行时隐藏的窗口句柄 """ # 内部英文标识 HIDE_SELF = "self" # 隐藏自身窗口 HIDE_TOPMOST = "topmost" # 隐藏最表层窗口 HIDE_TARGET = "target" # 隐藏指定标题窗口 # ★ 中文显示映射 TYPE_MAP = { HIDE_SELF: "隐藏自身", HIDE_TOPMOST: "隐藏最表层窗口", HIDE_TARGET: "隐藏指定窗口" } REVERSE_MAP = {v: k for k, v in TYPE_MAP.items()} def __init__(self, enable=True, hide_type=HIDE_TOPMOST, hotkey="", target_title=""): self.enable = tk.BooleanVar(value=enable) self.hide_type = tk.StringVar(value=hide_type) # 内部英文 self.hotkey = tk.StringVar(value=hotkey) self.target_title = tk.StringVar(value=target_title) # ★ 用于界面显示的中文变量,与 hide_type 自动同步 self.type_display = tk.StringVar(value=self.TYPE_MAP.get(hide_type, "隐藏最表层窗口")) # 当 type_display 变化时,更新 hide_type self.type_display.trace("w", self._sync_hide_type) # 运行时状态 self.hidden_hwnds = self.hidden_self = False def _sync_hide_type(self, *args): """将中文显示值转换为英文内部值""" eng = self.REVERSE_MAP.get(self.type_display.get(), self.HIDE_TOPMOST) if self.hide_type.get() != eng: self.hide_type.set(eng) def get_hidden_any(self): if self.hide_type.get() == self.HIDE_SELF: return self.hidden_self elif self.hide_type.get() == self.HIDE_TOPMOST: return len(self.hidden_hwnds) > 0 and win32gui.IsWindow(self.hidden_hwnds) else: return any(win32gui.IsWindow(hwnd) for hwnd in self.hidden_hwnds) def to_dict(self): return { "enable": self.enable.get(), "type": self.hide_type.get(), # 保存英文标识 "hotkey": self.hotkey.get(), "target_title": self.target_title.get() } @classmethod def from_dict(cls, data): item = cls( enable=data.get("enable", True), hide_type=data.get("type", cls.HIDE_TOPMOST), hotkey=data.get("hotkey", ""), target_title=data.get("target_title", "") ) # 保证显示与内部值一致 item.type_display.set(cls.TYPE_MAP.get(item.hide_type.get(), "隐藏最表层窗口")) return item class BossKeyApp: def __init__(self, root, auto_start=False): self.root = root self.root.title("老板键 v3.0 - 多配置版") self.root.geometry("620x550") self.root.resizable(True, True) self.root.protocol("WM_DELETE_WINDOW", self.on_closing) self.auto_start = auto_start # ---------- 动态配置列表 ---------- self.config_items = self.config_frames = # ---------- 状态 ---------- self.active = False self.action_queue = queue.Queue() self.registered_hotkeys = set() self.self_hidden = False self.load_config() self.build_ui() if self.auto_start: self.root.after(500, self.auto_elevated_start) self.process_queue() logger.info("程序启动") # ---------------------- 界面构建 ---------------------- def build_ui(self): ttk.Label(self.root, text="老板键设置(可添加多条规则)", font=("微软雅黑", 12, "bold")).pack(pady=(10, 5)) # ---------- 可滚动的配置列表区域 ---------- container = ttk.Frame(self.root) container.pack(fill="both", expand=True, padx=20, pady=4) canvas = tk.Canvas(container, borderwidth=0, highlightthickness=0) scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview) self.config_list_frame = ttk.Frame(canvas) self.config_list_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all"))) canvas.create_window((0, 0), window=self.config_list_frame, anchor="nw") canvas.configure(yscrollcommand=scrollbar.set) canvas.pack(side="left", fill="both", expand=True) scrollbar.pack(side="right", fill="y") def _on_mousewheel(event): canvas.yview_scroll(int(-1*(event.delta/120)), "units") canvas.bind_all("<MouseWheel>", _on_mousewheel) for item in self.config_items: self._add_config_row(item) if not self.config_items: default_item = HideConfigItem(hide_type=HideConfigItem.HIDE_TOPMOST, hotkey="ctrl+shift+f10") self.config_items.append(default_item) self._add_config_row(default_item) # ---------- 按钮区 ---------- bottom_frame = ttk.Frame(self.root) bottom_frame.pack(pady=(8, 5), fill="x", padx=20) btn_add = ttk.Button(bottom_frame, text="添加配置项", command=self.add_config_item) btn_add.pack(side="left", padx=5) self.start_btn = ttk.Button(bottom_frame, text="启动老板键", command=self.start) self.start_btn.pack(side="left", padx=5) self.stop_btn = ttk.Button(bottom_frame, text="停止老板键", command=self.stop, state="disabled") self.stop_btn.pack(side="left", padx=5) self.recover_all_btn = ttk.Button(bottom_frame, text="一键恢复所有隐藏窗口", command=self.recover_all_windows) self.recover_all_btn.pack(side="left", padx=5) self.status_label = ttk.Label(self.root, text="状态:未启动", foreground="gray") self.status_label.pack(pady=(2, 10)) def _add_config_row(self, item): frame = ttk.Frame(self.config_list_frame) frame.pack(fill="x", pady=3, padx=2) # 启用复选框 cb = ttk.Checkbutton(frame, variable=item.enable) cb.pack(side="left", padx=(5, 2)) # ★ 类型下拉(显示中文) type_combo = ttk.Combobox(frame, textvariable=item.type_display, values=, state="readonly", width=14) type_combo.pack(side="left", padx=2) # 快捷键输入框 hotkey_entry = ttk.Entry(frame, textvariable=item.hotkey, width=18, font=("Consolas", 10)) hotkey_entry.pack(side="left", padx=2) # 捕获按钮 btn_capture = ttk.Button(frame, text="捕获", command=lambda it=item: self.capture_hotkey(it.hotkey)) btn_capture.pack(side="left", padx=2) # 目标标题输入(仅当类型为 target 时显示) title_entry = ttk.Entry(frame, textvariable=item.target_title, width=20) title_label = ttk.Label(frame, text="标题:") def update_title_visibility(*args): if item.hide_type.get() == HideConfigItem.HIDE_TARGET: title_label.pack(side="left", padx=(10, 2)) title_entry.pack(side="left", padx=2) else: title_label.pack_forget() title_entry.pack_forget() item.hide_type.trace("w", update_title_visibility) update_title_visibility() # 删除按钮 btn_del = ttk.Button(frame, text="删除", command=lambda f=frame, it=item: self.delete_config_item(f, it)) btn_del.pack(side="right", padx=5) self.config_frames.append(frame) def add_config_item(self): new_item = HideConfigItem(hide_type=HideConfigItem.HIDE_TOPMOST, hotkey="") self.config_items.append(new_item) self._add_config_row(new_item) def delete_config_item(self, frame, item): if len(self.config_items) <= 1: messagebox.showinfo("提示", "至少保留一个配置项") return if self.active: messagebox.showwarning("提示", "请先停止老板键再删除配置") return self.config_items.remove(item) frame.destroy() self.config_frames.remove(frame) # ---------------------- 一键恢复所有隐藏窗口 ---------------------- def recover_all_windows(self): recovered = 0 if self.root.state() == "withdrawn": self.root.deiconify() self.root.lift() self.root.focus_force() recovered += 1 logger.info("一键恢复:自身窗口已显示") for item in self.config_items: if item.hide_type.get() == HideConfigItem.HIDE_SELF: if self.root.state() == "withdrawn": pass else: for hwnd in item.hidden_hwnds: if win32gui.IsWindow(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_SHOW) recovered += 1 item.hidden_hwnds.clear() if item.hide_type.get() == HideConfigItem.HIDE_SELF: item.hidden_self = False self.action_queue.put(("status", f"一键恢复完成,共恢复 {recovered} 个窗口")) # ---------------------- 权限工具 ---------------------- @staticmethod def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False @staticmethod def run_as_admin(): try: if getattr(sys, 'frozen', False): ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, '--elevated', None, 1) else: script = sys.argv params = f'"{script}" --elevated' ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, params, None, 1) except Exception as e: logger.error(f"请求管理员权限失败: {e}") def auto_elevated_start(self): logger.info("以管理员权限静默启动老板键") self.start() if self.active: self.root.withdraw() logger.info("窗口已隐藏,后台监听热键") # ---------------------- 每个配置项的切换逻辑 ---------------------- def toggle_by_item(self, item): t = item.hide_type.get() if t == HideConfigItem.HIDE_SELF: self._toggle_self(item) elif t == HideConfigItem.HIDE_TOPMOST: self._toggle_topmost(item) elif t == HideConfigItem.HIDE_TARGET: self._toggle_target(item) def _toggle_self(self, item): if self.root.state() == "withdrawn": self.root.deiconify() self.root.lift() self.root.focus_force() item.hidden_self = False self.action_queue.put(("status", "自身窗口已显示")) logger.info("自身窗口已显示") else: self.root.withdraw() item.hidden_self = True self.action_queue.put(("status", "自身窗口已隐藏")) logger.info("自身窗口已隐藏") def _toggle_topmost(self, item): if item.hidden_hwnds and win32gui.IsWindow(item.hidden_hwnds): hwnd = item.hidden_hwnds win32gui.ShowWindow(hwnd, win32con.SW_SHOW) title = win32gui.GetWindowText(hwnd) item.hidden_hwnds.clear() self.action_queue.put(("status", f"已恢复窗口:{title}")) logger.info(f"恢复最表层窗口:{title}") else: hwnd = win32gui.GetForegroundWindow() if hwnd: title = win32gui.GetWindowText(hwnd) if hwnd == self.root.winfo_id(): self.action_queue.put(("status", "不能隐藏自身窗口,请使用自身隐藏规则")) return win32gui.ShowWindow(hwnd, win32con.SW_HIDE) item.hidden_hwnds = self.action_queue.put(("status", f"已隐藏窗口:{title}")) logger.info(f"隐藏最表层窗口:{title}") else: self.action_queue.put(("status", "未找到前台窗口")) def _toggle_target(self, item): if item.hidden_hwnds: restored = 0 for hwnd in item.hidden_hwnds: if win32gui.IsWindow(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_SHOW) restored += 1 item.hidden_hwnds.clear() self.action_queue.put(("status", f"已显示 {restored} 个窗口")) logger.info(f"目标窗口已恢复,数量: {restored}") else: title = item.target_title.get().strip() if not title: self.action_queue.put(("status", "请填写目标窗口标题关键字!")) logger.warning("目标隐藏:标题为空") return matches = gw.getWindowsWithTitle(title) if not matches: self.action_queue.put(("status", f"未找到包含 '{title}' 的窗口")) logger.info(f"未找到匹配窗口: {title}") return hidden = 0 for win in matches: if win.visible: win.hide() item.hidden_hwnds.append(win._hWnd) hidden += 1 if hidden: self.action_queue.put(("status", f"已隐藏 {hidden} 个窗口")) logger.info(f"隐藏目标窗口: {title},数量: {hidden}") else: self.action_queue.put(("status", "没有可见的匹配窗口需要隐藏")) logger.info(f"没有可见的匹配窗口: {title}") # ---------------------- 热键注册(基于配置列表)--------------------- def _start_hotkeys(self): try: registered = set() for item in self.config_items: if not item.enable.get(): continue hk = item.hotkey.get().strip() if not hk: continue try: keyboard.remove_hotkey(hk) except: pass keyboard.add_hotkey(hk, lambda it=item: self.action_queue.put(("toggle_item", it))) registered.add(hk) logger.info(f"注册热键: {hk} (类型: {item.hide_type.get()})") self.registered_hotkeys = registered return True except Exception as e: logger.error(f"注册热键失败: {e}") return False def _stop_hotkeys(self): for hk in self.registered_hotkeys: try: keyboard.remove_hotkey(hk) except: pass self.registered_hotkeys.clear() for item in self.config_items: for hwnd in item.hidden_hwnds: if win32gui.IsWindow(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_SHOW) item.hidden_hwnds.clear() if item.hide_type.get() == HideConfigItem.HIDE_SELF: item.hidden_self = False if self.root.state() == "withdrawn": self.root.deiconify() self.active = False self.start_btn.config(state="normal") self.stop_btn.config(state="disabled") self.status_label.config(text="状态:已停止") logger.info("老板键已停止") def start(self): if self.active: messagebox.showinfo("提示", "老板键已启动,无需重复操作") return valid = False for item in self.config_items: if item.enable.get() and item.hotkey.get().strip(): valid = True break if not valid: messagebox.showwarning("提示", "请至少启用一个配置项并设置快捷键!") return if not self.is_admin(): if not messagebox.askyesno("权限提示", "注册全局热键通常需要管理员权限,否则可能无效。\n是否继续尝试启动?"): return if self._start_hotkeys(): self.active = True self.start_btn.config(state="disabled") self.stop_btn.config(state="normal") self.status_label.config(text="状态:已启动(老板键生效)") self.save_config() logger.info("老板键已启动") else: if not self.is_admin(): if messagebox.askyesno("需要管理员权限", "注册全局热键失败。是否以管理员身份重新启动程序?"): self.save_config() self.run_as_admin() self.root.destroy() sys.exit(0) else: messagebox.showinfo("取消", "老板键未启动。") else: messagebox.showerror("错误", "热键注册失败,请检查快捷键是否被占用。") def stop(self): self.action_queue.put(("stop",)) self.status_label.config(text="状态:已停止") def on_closing(self): if self.active: self._stop_hotkeys() logger.info("程序退出") self.root.destroy() # ---------------------- 快捷键捕获与队列 ---------------------- def capture_hotkey(self, var): def _capture(): try: self.action_queue.put(("status", "请按下组合键...")) hotkey_str = keyboard.read_hotkey(suppress=False) self.action_queue.put(("update_hotkey", var, hotkey_str)) logger.info(f"捕获快捷键: {hotkey_str}") except Exception as e: self.action_queue.put(("status", f"捕获失败: {e}")) logger.error(f"捕获快捷键失败: {e}") threading.Thread(target=_capture, daemon=True).start() def process_queue(self): try: while True: cmd = self.action_queue.get_nowait() if cmd == "status": self.status_label.config(text=cmd) elif cmd == "update_hotkey": _, var, value = cmd var.set(value) elif cmd == "toggle_item": item = cmd self.toggle_by_item(item) elif cmd == "stop": self._stop_hotkeys() except queue.Empty: pass self.root.after(100, self.process_queue) # ---------------------- 配置持久化 ---------------------- def save_config(self): data = try: with open(CONFIG_FILE, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) logger.debug("配置已保存") except Exception as e: logger.error(f"保存配置失败: {e}") def load_config(self): if os.path.exists(CONFIG_FILE): try: with open(CONFIG_FILE, "r", encoding="utf-8") as f: data = json.load(f) if isinstance(data, list): for item_data in data: self.config_items.append(HideConfigItem.from_dict(item_data)) else: # 兼容旧版单个配置 logger.info("检测到旧版配置,正在转换...") old = data if old.get("enable_self"): self.config_items.append(HideConfigItem( enable=True, hide_type=HideConfigItem.HIDE_SELF, hotkey=old.get("self_hotkey", "ctrl+shift+f9") )) if old.get("enable_topmost"): self.config_items.append(HideConfigItem( enable=True, hide_type=HideConfigItem.HIDE_TOPMOST, hotkey=old.get("topmost_hotkey", "ctrl+shift+f11") )) if old.get("enable_target"): self.config_items.append(HideConfigItem( enable=True, hide_type=HideConfigItem.HIDE_TARGET, hotkey=old.get("target_hotkey", "ctrl+shift+f10"), target_title=old.get("target_title", "") )) logger.info("已加载历史配置") except Exception as e: logger.error(f"加载配置失败: {e}") # ---------------------- 主入口 ---------------------- if __name__ == "__main__": auto_mode = "--elevated" in sys.argv root = tk.Tk() app = BossKeyApp(root, auto_start=auto_mode) root.mainloop() 复制代码
2026年-6月-19日
16 阅读
0 评论
电脑软件
1
2
3