news 2026/10/13 15:06:40

【CStackGUI 实战】我用自研的 Win32 GUI 框架写了个「工具箱启动器」:8 页签、真注册表操作、右键菜单管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CStackGUI 实战】我用自研的 Win32 GUI 框架写了个「工具箱启动器」:8 页签、真注册表操作、右键菜单管理

文章目录

    • 一、这是什么
    • 二、功能介绍
      • 1. 八页签工具启动器 + 全局搜索
      • 2. 我的工具:改一个 ini 就能加工具,不用重编译
      • 3. 右键菜单管理:扫描、批量禁用、备份删除、一键还原
      • 4. 成对开关:模式照抄原版,落点绝不越界
      • 5. 日志与主题
    • 三、几个值得说的设计
    • 四、怎么跑起来
    • 写在最后

toolbox是 CStackGUI 框架的旗舰示例 —— 一个对标现成工具箱产品的完整桌面程序:60+ 个真实可启动的工具、能真装真撤的右键菜单管理、真读写注册表的批量禁用/备份/还原,连自检红线都写进了代码。所有操作都是真的,不是贴图演示。

先看效果:
【截图位 1:8 页签主界面全景】

【截图位 2:右键增强页——扫描结果表格 + 批量操作按钮】

一、这是什么

toolbox(工具箱启动器)是 CStackGUI 框架的示例工程之一。CStackGUI 是一个自研的 Win32 GUI 框架,核心思路是:

  • 界面在.cgui文件里(JSON 描述,用配套画布设计器可视化编辑,F5 直接编译运行);
  • 行为在纯 C 代码里(回调函数按控件 id 绑定,界面与逻辑彻底分离);
  • 配套 runtime(自绘控件、皮肤、注册表/文件/进程工具库)、designer(Electron 画布)、以及一组覆盖各控件的示例。

toolbox的定位是"对标一个真实产品功能面"的综合示例——界面形态与行为逻辑都按真实工具箱的标准来做。

目录里只有三样东西:

文件说明
main.c全部行为:工具命令表、搜索、我的工具、成对开关、右键菜单管理、日志
toolbox.cgui界面定义(画布里打开可直接编辑)
toolbox.exe/lib/构建产物

二、功能介绍

1. 八页签工具启动器 + 全局搜索

常用 / 常用设置 / 我的工具 / 系统工具 / 清理优化 / 隐私设置 / 应用管理 / 右键增强,共 8 个页签,60+ 个内置工具(任务管理器、磁盘管理、计划任务……全是真实命令启动)。

底栏有完整的功能带:「本页 X 个(共 Y 个)」实时计数+ 搜索 / 日志 / 设置 / 关于 / 检查更新。全局搜索按名称和命令双字段过滤,还有一个可选开关——输入关键字自动切到搜索页;

「常用」页则自动记录你最近使用的工具。

2. 我的工具:改一个 ini 就能加工具,不用重编译

8 个槽位,配置文件在%LOCALAPPDATA%\toolbox\mytools.ini:

[t1] name=DeepSee cmd=deepsee.exe --work D:\ [t2] name=公司 OA cmd=https://oa.example.com

保存后点「我的工具」页的重新载入,槽位按钮立刻生效;空槽位自动置灰。加一个自定义工具连一行 C 代码都不用碰。

3. 右键菜单管理:扫描、批量禁用、备份删除、一键还原

这是我认为最有意思的一页:

  • 扫描:枚举 HKCU + HKLM 下六个位置(文件 / 文件夹 / 文件夹空白处 / 桌面 / 磁盘 / 通用对象)的shell程序菜单与shellexDLL 扩展项,逐项读取MUIVerb/command/LegacyDisable,按来源分组(工具箱装的 / 程序装的 / 扩展项)、按状态分类(在用 / 已禁用 / 无命令);
  • 搜索 + 五路过滤:标题子串搜索(忽略大小写),全部 / 未禁用 / 程序装的 / 已禁用 / 扩展项;
  • 多选行真操作(每次操作后自动重扫):
    • 禁用—— 写入LegacyDisable值;
    • 恢复—— 删除该值;
    • 备份并删除—— 先reg export导出.reg再整键删除,动手前弹确认框列出全部路径;
    • 还原本次改动—— 禁用过的删值、删过的导入备份,「曾改动」列表可查。

工具箱自己装的两条右键菜单(复制文件路径 / 在此处打开终端)也是真装真撤,用reg.exe完成,删得干净。

4. 成对开关:模式照抄原版,落点绝不越界

「装上 / 撤掉」成对开关控制工具箱自身行为:日志镜像、日志时间戳、自动切搜索页、记录最近使用、右键沙箱标记。与很多工具不同的是,这些开关的落点是程序自己的沙箱键HKCU\Software\CStackGUI\examples\toolbox—— 真改真还原,配「查看曾改动 / 还原全部」,绝不碰系统键。

5. 日志与主题

日志是非模态对话框(可以边操作边看),支持镜像到控制台和行首时间戳(各由开关控制);设置页是深浅主题一键切换,状态栏每次操作都有回执文案。

三、几个值得说的设计

边界照实说,不在示例里装。界面上直接写明:系统区(HKLM)只读得到、修改需要管理员身份,未提权时点击会明确拒绝;shellex 扩展项只显示不给动。

原版有彩色图标、106+ 工具,这里如实收在 60+、用配色代替贴图——诚实差异在源码注释里逐条列着。

自检红线。程序支持--selftest无窗自检:不启动任何程序、不读写磁盘、凡有副作用的操作先判断有没有窗口。按钮 id 与命令表不同步会在日志里报"不同步",自检输出可直接 grep,适合放进 CI。

数据落点全部可预期:我的工具配置、.reg备份、app.log(256KB 轮转)都在%LOCALAPPDATA%\toolbox\,被写的注册表位置只有上面那个沙箱键。

加一个内置工具只要两步:.cgui加按钮 +k_tools[]命令表加一行,计数和搜索自动生效。

四、怎么跑起来

rem 仓库根目录 build-app.bat toolbox examples\toolbox\toolbox.exe examples\toolbox\toolbox.exe --selftest rem 无窗自检

也可以直接用画布打开toolbox.cgui按 F5。工程里还带了真机验证脚本(自动建探针键 → 模拟点击扫描/搜索/过滤/批量操作 → 注册表真值断言 → 截图取证 → 清理),改右键管理相关代码后可以一键回归。

写在最后

这个示例想证明一件事:GUI 框架的示例不必是玩具。

控件、皮肤、注册表、进程、文件这些原料齐了之后,一个 C 语言写的桌面工具完全可以做到"功能真实、边界诚实、可自检可回归"。

如果你对 CStackGUI 本身感兴趣,或者想看右键菜单管理的实现细节,欢迎在评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 15:06:39

小身材,大能量!

可穿戴 PPG 心率检测设计:低功耗、佩戴识别与光路隔离要点在做智能手表、运动手环等可穿戴设备时,心率检测看起来只是“加一颗传感器”,但实际落地会遇到很多工程问题:功耗、佩戴状态、光路串扰、不同肤色和佩戴松紧、环境光、运动…

作者头像 李华
网站建设 2026/10/13 15:06:20

交替条件期望算法(ACE)的MATLAB实现:非线性回归与传感器校准实战

简介:交替条件期望算法(ACE)是一种面向非线性回归与统计建模的优化方法,这份MATLAB资源将其核心流程封装为一个可直接运行的主脚本,适用于硬件接口与物联网场景下对传感器数据、设备能耗等进行非线性建模的研究者或工程…

作者头像 李华
网站建设 2026/10/13 15:05:29

Eclipse代码行数统计插件实战:选型、配置与避坑指南

简介:面向Eclipse开发者与Java项目团队的代码行数统计插件资源,目标是解决在IDE中快速掌握项目规模、注释密度与空行占比的痛点,适用于项目工作量估算、代码评审与重构决策场景。压缩包共16个文件、约60KB,包含可安装插件jar、插件…

作者头像 李华
网站建设 2026/10/13 15:03:58

LD3320语音识别模块实战:从压缩包到第一次识别

简介:绿深LD3320语音识别模块全套开发资料,面向单片机开发者、嵌入式初学者及需要为项目加入语音交互功能的工程师。资源围绕LD3320芯片的语音识别与串口通信能力展开,解决从硬件理解、代码移植到抗干扰调试的完整链路问题,可用于…

作者头像 李华
网站建设 2026/10/13 15:03:31

[脚本]保持屏幕常亮

KeepAwake.ps1 # KeepAwake.ps1 # 防止屏幕自动关闭,并阻止系统自动睡眠# 仅在类型尚未加载时定义,避免重复运行时报错 if (-not ([System.Management.Automation.PSTypeName]SleepPrevent).Type) {Add-Type " using System; using System.Runtime.…

作者头像 李华
网站建设 2026/10/13 15:03:26

按钮级权限用指令写:Vue3 v-permission 从封装到落地

按钮级权限用指令写:Vue3 v-permission 从封装到落地 导读:管理后台的权限,路由级好做,v-if 一判就行。真正烦的是按钮级——“这个岗位只能主管导出,专员只能看不能导”,如果每个按钮都写 v-if"hasPe…

作者头像 李华