1. 做XMoni项目的原因

XMoni0.7.8ScreenShot
XMoni0.7.8ScreenShot

作为硬件爱好者,还是非常关注电脑的动态负载的,尤其是当你拥有一个13代I9很有可能缩肛的处理器,还经常跑深度学习训练、大型游戏、建模渲染或者其他高负载的工作的时候。如果可以有一个桌面仪表盘帮助你随时看到自己电脑的关键信息,那能帮助你更好的了解自己的电脑的实时运行情况,摸清他的脾气,让电脑更好的为自己工作。

比如说搞明白渲染时 GPU 跑到多少瓦,散热温度能不能跟上?CPU 有没有因为温度撞墙而降频,是否长期运行在高频电压的缩肛高风险区?等等这些都需要一些硬件监测软件来辅助。

市面上当然不缺硬件监控工具。AIDA64 功能强大但界面古老,而且自定义界面真的让我有点头疼,也有一些简单的文字工具,但是我个人还是喜欢一些GUI页面的,让数据更加直观可视化。
任务管理器的性能标签页数据维度有限且无法悬浮。我想要的是一块安静悬浮在桌面上、半透明不遮挡工作、五维数据一目了然的仪表盘。这也是自从我从win7时代,一直想要自己动手做的事情。
但是本人是编程小白,对程序只是懂得一点点,独立完成这种开发项目还是很难的。但是现在LLM横空出世,我尝试使用腾讯Workbody来进行Vibe Code,如果你问我为什么不用codex和claude code,那确实比workbody效果好,但是主要是穷,有一些订阅费用可能高达上千,我还是选择放弃了。

如果你也想试试,可以点击我的邀请链接注册,反正都可以领一些积分,我也能赚点积分:https://www.codebuddy.cn, 这些起始积分完全可以支撑你完成一些小项目的开发工作。

2.对话全记录:7 天的完整开发轨迹

以下是根据实际对话历史和 WorkBuddy 工作记忆还原的开发全流程。每一段对话都是真实的,每一个 Bug 都是亲历的。

第一阶段(6月18日):从零到 V0.7.0——传感器地狱与 GDI+ 重生

最早的项目骨架建立在一个更早的对话中。当时的核心任务是:

  • 用 LibreHardwareMonitor 连接硬件传感器树,建立一个基础的采集循环;
  • 用 GDI+ 的 DrawArc 绘制半圆弧进度仪表,完全弃用 WinForms 控件;
  • 用 UpdateLayeredWindow + BLENDFUNCTION 实现逐像素 Alpha 混合,做出真正的半透明毛玻璃效果。

第一个地狱是传感器匹配。LHM 返回的传感器树是一团没有标记的层次数据:D3D 3D 负载、GPU Core 负载、D3D Cuda 负载……不同的 GPU 型号返回的传感器名称千奇百怪。我不得不让 AI 反复抓取 Debug 日志,通过启发式规则逐一匹配,最终采用 max(D3D 3D, GPU Core, D3D Cuda) 作为 GPU 总负载。这个逻辑在 V0.7.0 版本重写了三次才稳定。

第二个地狱是网络适配器过滤。Windows 系统里充斥着虚拟网卡、蓝牙适配器、中文命名的隐藏设备。AI 最初尝试用简单的名称黑名单,屡屡失灵。后来设计了”三层智能过滤”:仅保留物理网卡类型 + 排除已知虚拟前缀 + 排除中文隐藏适配器。网络速度精确到小数点后三位,单位自适应 MB/s。

磁盘模块也踩了坑:WMI 的 Win32_DiskDrive → Win32_DiskPartition → Win32_LogicalDisk 映射链并非直接的父子关系,需要通过索引桥接。这个链路上的每一步错误都会导致盘符显示为空白。

到 V0.7.0 发布时,程序已经有了 5 个模块:CPU 负载仪表、CPU 频率折线、内存折线、网络上下行仪表、每个 GPU 独立一行的完整监控。约 3000 行 C# 代码。

第二阶段(6月18-19日):V0.7.1-V0.7.4——精细化打磨

这一阶段全是小步快跑的迭代,每一次对话 5-10 分钟,解决一个具体问题:

  • V0.7.1 CPU 频率双曲线:蓝色实线显示当前频率,紫色虚线显示睿频基准。关键在于紫色虚线不能参与 Y 轴缩放——如果 CPU 降频到 800MHz 而睿频基准是 5000MHz,双线同框就会彻底失焦。AI 提出了”固定上限”方案:FixedMax = 6000,基准线始终参考绝对频率。
  • V0.7.2 CPU/GPU 信息标题行:在仪表上方新增一行文字,显示完整型号和核心参数。”CPU1: Intel Core i9-14900KF | 基准频率: 3200 MHz”,”GPU1: NVIDIA GeForce RTX 4090 | 24GB VRAM | CUDA”。实现过程中 GpuInfo 数据结构需要从 LHM 的嵌套 Sensor 对象中提取,AI 反复读了 HardwareMonitor.cs 才找到正确的字段路径。
  • V0.7.3 显存格式:VRAM 左上角由 “0.9G” 改为 “0.9/24G”,显示已用/总量。
  • V0.7.4 GPU 完整型号:GPU 标题行显示完整型号字符串,同时做智能截断——超过 12 字符自动缩写为 “NVIDIA G…”,避免小窗口溢出。

第三阶段(6月20日):V0.7.5-V0.7.6——系统托盘与启动优化

这一阶段的重点是让程序”更像一个真正的软件”:

  • V0.7.5 标题栏版本号 + 基准频率中文化:标题栏显示当前版本号,CPU 基准频率标签中文化。
  • V0.7.6 系统托盘 + 菜单对勾同步:新增系统托盘图标,双击恢复/最小化。右键菜单的三项(至于最前/系统托盘/Debug)加入对勾同步,开/关状态实时反馈。这是 WinForms NotifyIcon 与自定义 GDI+ 渲染之间的复杂交互——托盘事件在 UI 线程触发,渲染在 Timer 线程执行,需要小心处理跨线程状态同步。
  • 启动优化:移除 200ms 启动延迟,Bitmap 缓存复用避免拖拽卡顿。StringFormat 的 GDI 泄漏修复了 8 处实例——这是 GDI+ 开发中最容易犯的错误之一,每个 new StringFormat() 都是不可回收的 GDI 句柄。
  • 发光效果修复:发光开关与 Debug 窗口关闭后的对勾状态不同步——AI 花了三轮对话才定位到这是 DebugCheckItem.Checked 未在 ToggleDebug() 中更新。

第四阶段(6月20-22日):V0.7.7——宣传网站与响应式 HTML

程序稳定后,我开始为 XMoni 搭建宣传页。

从零设计了一个深色主题的 HTML 页面:Hero 区域带粒子背景动画、”五维全面覆盖 实时精准呈现”主标题、”轻量 · 精准 · 兼容”副标题。功能展示用 6 张卡片网格,每张卡片介绍一个监控模块。更新日志区域用左边版本号、右边标题+时间的横条布局。

技术细节:

  • 动画细节:Logo、标题、按钮带渐入动画。规格数字使用紫蓝渐变色。Moni 三个字母逐个做渐变色效果。
  • 手机适配:最初使用 overflow-x: auto 横向滚动导航栏,后来发现文字溢出时无法正确修剪,改为 flex-start + min-width: 0 + overflow: hidden。这个修复花了 3 轮对话。
  • SmartScreen 提示:由于程序未购买代码签名证书(EV 证书年费 $300+),Windows Defender 会弹出”Windows 已保护你的电脑”警告。宣传页底部加入了详细的操作说明——右键属性解除锁定、SmartScreen 更多信息仍要运行、程序不写注册表不联网可放心使用。

第五阶段(6月22日):V0.7.8——按钮交互与 CUDA 智能

这一版的核心改动在于用户体验优化:

  • 图钉+关闭按钮:左上角图钉(Pin)和右上角关闭按钮,鼠标悬停时弹出独立提示框。按钮区域通过 _pinRect 和 _closeRect 检测鼠标位置,悬停时改变颜色并显示 ToolTip。
  • CUDA 智能检测:NVIDIA 显卡显示 CUDA 折线图,Intel/AMD 自动隐藏。实现方式是在 CreateGpuRow 时判断 gpuName 是否以 “NVIDIA” 开头,决定是否渲染 CUDA sparkline。
  • hdrGap 间距重构:Mini 模式下头部间隙 2px,等比放大到其它分辨率。
  • 历史版本重复 Bug:HTML 历史版本列表中出现了两个 v0.7.0——原因是 sed 全局替换时未完整匹配,导致部分替换残留了旧文本。修复花了一轮对话。
  • 截图切换:截图从 0.7.6ScreenShot.png 更新到 0.7.8ScreenShot.png,分辨率 800×800。CSS 需要同时适配 PC(fit-content 收缩)和手机(max-width: 100%)。背景加 padding 和圆角边框,四边均匀留白。

第六阶段(6月22-23日):V0.7.9——多语言系统与双语网站

这是整个项目中复杂度比较高的模块,48小时内的密集迭代:

  • 多语言架构:新建 Loc.cs 静态管理器,从 Language/zh.json 和 Language/en.json 加载 90+ 翻译键。所有硬编码中文替换为 Loc.Get("key", "fallback")。程序启动时加载对应语言,切换后自动重启。
  • 英文版宣传页:创建 index-en.html,全量翻译 Hero/Features/Specs/Tech/Download/Changelog。旧版日志 V0.0-V0.6 的所有技术条目全部英文化。加入中美国旗 SVG 图标和语言切换下拉菜单。
  • 连续踩坑记录
    • ColorItems 静态初始化:颜色标签数组被声明为 static readonly,在 Loc.Load() 执行之前就固化了中文值。修复方法是改为实例字段,在构造函数中重新赋值。这个 bug 因为”代码看起来都对”而花了很长时间定位。
    • 下拉菜单 hover 死区:按钮和菜单之间 4px 的 margin-top 形成了一个无法 hover 的间隙。解法是将 margin 改为 padding-top 放在外容器上,菜单内容包裹 .lang-dropdown-inner
    • 字体设置不生效InitFonts() 只更新了 GaugeRenderer 的字体,SparklineRenderer 的 TitleFont/ValueFont 从未更新,导致选择新字体后折线图文字不变。
    • 语言切换重复启动Application.Restart() 让新进程在旧进程释放 Mutex 之前启动,触发”XMoni 已在运行中”提示。修复方式:重启前调用 ReleaseMutexForRestart() + Process.Start(exePath) + Environment.Exit(0)
    • 版本号连环替换:用 sed 's/0.7.8/0.7.9/g' 升级版本号时,把 HTML 中 V0.7.8 更新日志的标题也改成了 V0.7.9,导致 V0.7.8 日志消失。修复需要手动还原 HTML 标题并新增 V0.7.9 条目。
    • 国旗变形:最初使用 data URI 的内联 SVG,五角星坐标在小尺寸下重叠变形。经历了 4 次迭代——从简化 polygon 到 5 个独立多边形,最终采用 600×400 viewBox 的精确坐标。
    • 手机端下拉被遮挡:nav 的 overflow: hidden 在移动端裁剪了语言下拉菜单。修改为 overflow: visible 但需要同步解决链接列表的水平溢出问题。
  • SEO 优化:中英文页面加入 descriptionkeywordsog:titleog:imageog:urltwitter:card 以及 hreflang 双语言声明。
  • 下载链接规范化:中英文下载链接统一为 https://www.idchina.vip/XMoni/XMoni v0.7.9.zip

3.WorkBuddy 的工作方式与 Vibe Code 的开发体验

在整个 7 天的开发中,每一行代码都由 AI 生成,我基本没怎么开过 Visual Studio。
我做的所有事情是:描述需求 → 看结果 → 描述问题 → 再看结果,如此循环。
WorkBuddy 承载了代码的读写、编译、测试、修复的全部流程。

但这绝不意味着开发变简单了。以下是实践中的真实难点:

1. 上下文窗口的长度限制影响LLM对代码的理解能力

WorkBuddy 每次对话只能看到有限的上下文。当 MainForm.cs 超过 500 行,它就不能同时”看到” HardwareMonitor.cs 和 SettingsForm.cs。这意味着我需要精心设计每次对话要”喂”什么信息:这个 Bug 需要 AI 看哪些文件?要不要让它先读 settings.ini 的格式?

一次典型的 Bug 修复对话是这样的:先让 AI 读主文件 → 找到异常位置 → 再让它读依赖的类文件 → 最后才给出修改方案。信息投喂的精度直接决定了修复质量。一次错误的上下文投放,可能让 AI 生成完全不符合现有架构的代码,修复这些凭空产生的 Bug 比从头写还痛苦。

WorkBuddy 内置的 Memory 系统帮助缓解了这个问题——它能把关键的项目进展和用户偏好持久化到 .workbuddy/memory/ 目录,下次对话时自动加载。比如”隐者艾伦翻译成 Allen”这个偏好,就是在内存中被记录后自动应用到后续所有对话的。

2.腾讯自研混元模型的介入搞砸了项目,使得项目不得不从头再来

在V6版本的时候,有一次程序彻底崩溃,记忆如下:## V6 全面重构 (2026-06-19 19:28)

备份文件(HWMonitor_backup/)存在大量UTF-8编码损坏,中文字符三字节序列的末尾字节被截断,导致:
– 字符串字面量缺少闭合引号
– 注释吞噬后续代码(`\r\n`被截断)
– 变量声明被注释吃掉

这个问题是怎么出现的呢 ?最初是我希望workbody能够帮我修改一下标题栏,但是标题栏是中英文混合的,可能是某一个地方的代码没有闭合,或者中英文编码不正确。在一轮修改过后,导致极其严重的连锁反应。整个程序都崩溃了,现有的代码也损坏了,不得不从头再来。
而这个问题,指向了腾讯的自研混元模型。在这之前我主要是用AUTO自动调配来进行开发,没想到切换到混元模型之后,程序就出现了重大BUG,而且混元模型在面对错误的时候,一直在推脱,要求采用从头开始写的方式,然后还说需要20-30分钟,连续三轮都不执行修复工作。最终还是改为deepseekV4 pro模型才开始执行修复过程。后续开发过程中我直接拉黑了混元模型,只用deepseekV4 pro,问题少了很多。
当时的截图如下:

混元模型把代码整崩溃的过程,从第五个promote开始出错的
混元模型把代码整崩溃的过程,从第五个promote开始出错的
混元模型给出的错误提示
混元模型给出的错误提示
deepseek V4Pro的修复思路
deepseek V4Pro的修复思路

所以一定要经常养成备份思路,Vibe Code一旦出错,对于没有编程基础的人来说是毁灭性打击。没有备份的话,整个项目可能都要从头再来

3. 需求描述的精度博弈和反馈机制

“加一个设置面板”和”在设置面板的外观标签页中,第一个 GroupBox 加入 10 种颜色的下拉选择器,每行 5 个色块按钮”——这两句话的产物天差地别。Vibe Code 要求你具备极高的需求拆解能力。

我逐渐养成了一个习惯:必须要为程序开发DEBUG窗口,如果VIBE CODE仅仅凭借编译结果来进行代码优化,实际上是无法建立起完整的反馈机智的,必须通过图形化反馈+代码执行结果反馈(debug窗口复制实时反馈文字)等多种方式,才能够让LLM理解自己的执行结果,这点和HTML5的编程是不一样的,HTML说啥就是啥,但是C#的执行不一定如我们所愿。

反馈debug窗口
反馈debug窗口

4. 跨文件连锁修改的雪崩效应

改一个变量名,可能需要同步修改 XMoni.csproj 的 NuGet 引用、AppSettings.cs 的序列化逻辑、SettingsForm.cs 的 UI 绑定、MainForm.cs 的渲染调用。
AI 在执行全局替换时,一个不留神就会炸掉不该碰的文件。

V0.7.8 → V0.7.9 的版本号升级中:一条 sed 命令横扫了所有文件,HTML 页面的更新日志标题被整体替换,这会导致历史版本更新日志消失。后续发现并修复这个问题花了 3 轮对话。

5. 需要反复检查LLM代码关注不到的细节

传统开发中,你写的每行代码都是经过脑子验证的。Vibe Code 中,AI 生成的速度远快于你的阅读速度。这意味着验收成了瓶颈:
你需要逐行检查 AI 的修改是否符合意图,是否引入了副作用,是否遗漏了边界条件。

多语言模块的开发让我深刻体会到这一点。AI 一次性生成了 90+ 键的 JSON、Loc.cs 管理器、SettingsForm 标签页、MainForm 重启逻辑。编译通过,运行正常——但所有颜色标签都是中文,因为 static readonly 的初始化时机问题。这个问题不是因为代码写错了,而是因为架构假设在”AI 生成的思维”和”CLR 的执行顺序”之间出现了微妙的不匹配。

6. WorkBuddy 的工具链生态

WorkBuddy 提供了完整的工具链来支撑这种开发方式:

  • 文件操作:Read/Write/Edit 工具可以像专业 IDE 一样进行精确的字符串替换,而不是简单的全文覆盖。
  • 编译与部署:Bash 工具执行 dotnet build,PowerShell 执行文件复制。每次修改后自动编译验证。
  • 记忆系统:三层记忆机制——云记忆自动学习用户偏好,用户级 MEMORY.md 存储跨项目规则,工作区 memory/ 保存每日日志和项目约定。
  • 自动化:可以创建周期性任务(如”每天检查版本更新”),但目前本项目尚未启用。
  • 多专家协作:可以切换到不同领域专家角色(如 UI 设计师、数据工程师),但本项目主要使用通用模式。

项目总览

截至 V0.7.9,XMoni 的核心数据:

  • C# 代码量:约 3500 行(MainForm.cs 约 600 行,HardwareMonitor.cs 约 400 行,SettingsForm.cs 约 350 行,渲染器约 600 行)
  • HTML/CSS 宣传页:中文 650 行 + 英文 680 行
  • 多语言字库:90+ 键的中英文 JSON
  • 版本迭代:V0.0 → V0.7.9,超过 20 个小版本
  • 对话轮次:约 200 轮(粗略估计)
  • 开发周期:实际编码约 7 天,横跨 6 天时间

一个很有趣的现象是:这整个开发过程中,我没有写过一行 git commit。WorkBuddy 不是 IDE,它是 IDE 的替代品。版本管理、编译、测试、部署都在对话中完成。

写在最后:

Vibe Code 不是魔法。它是一种新的生产力工具,能放大你的设计能力,但是他也不是万能的,编程能力极大受限于LLM大模型的实力。比如我虽然挺喜欢用腾讯的workbody,但是腾讯的混元模型真的不好用。
它让一个人完成三人份的工作成为可能,但前提是这个人必须具备足够的架构判断力、需求拆解能力和验收纪律。

WorkBuddy 让我体验到了这种新范式的完整工作流:从项目脚手架搭建,到传感器调试,到 UI 精细化打磨,到双语网站搭建,到多语言架构设计——所有环节都在自然语言对话中完成。

如果你也在用 AI 辅助开发,我的建议是:把更多时间花在”想清楚要什么”上,而不是”怎么写”。AI 负责代码,你负责决策。这才是 Vibe Code 的正道。

XMoni 完全开源,无后台服务,无数据收集。欢迎下载体验。
如果你有任何建议,可以在本文下留言,这个程序才刚刚起步,我会慢慢尝试优化和维护它。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注