MSysMonitor:基于 .NET WPF 与 PDH 的 Windows 系统监控项目

用于 Windows 服务器运维时常驻监控主机负载,快速发现资源瓶颈。项目提供动态托盘图标、半透明悬浮窗、屏幕边缘细条和历史曲线,基于 PDH 轻量采集 CPU、内存、磁盘与网络指标,支持免安装单文件部署。【此简介由AI生成】

Branch1Tags6
FilesLast commitLast update
1 month ago
23 days ago
23 days ago
1 month ago
1 month ago
1 month ago
23 days ago
MSysMonitor 图标:双区扇形,外框 CPU 25%(绿),内盘内存 75%(橙)

项目图标:双区扇形方案,外框 CPU 25%(绿),内盘内存 75%(橙)。

MSysMonitor

Windows 系统资源监视器:常驻托盘,动态托盘图标显示 CPU 占用,并带一个半透明悬浮窗实时展示 CPU / 内存 / 磁盘 / 网络。

面向 Windows Server 2019 及以上 的服务器运维场景,单文件免安装部署。

特性

  • 动态托盘图标:随负载变化的扇形百分比图标,以圆角矩形做蒙板,绿 / 黄 / 橙 / 红四级配色,自动跟随系统 DPI 选择图标尺寸;四种方案可切换:
    1. 单个扇形显示 CPU 负载
    2. 单个扇形显示内存占用
    3. 外框扇形 CPU + 内盘扇形内存
    4. 自定义组合:外环与内盘各指定一个指标(CPU / 内存 / 磁盘已用 / 磁盘吞吐 / 网络吞吐),图标够大时还能在中心叠数值
  • 悬浮窗:无边框半透明、置顶、不抢焦点、不进 Alt+Tab,可拖动并记忆位置;显示项可逐项开关,高度随内容收缩
  • 边缘细条:贴屏幕顶部/底部/左侧/右侧的发丝状进度条(2 物理像素,按 DPI 补偿),半透明、不响应任何鼠标与键盘事件、零干扰,可显示 CPU、内存或两者,可指定贴哪块显示器,从托盘菜单开关
  • htop 窗口:终端风格的实时监控窗口,左侧每核 CPU / 内存进度条,下方按 CPU 排序的进程列表;进程列表 2 秒刷新一次,窗口隐藏时停止采集;标题栏可钉住置顶、开鼠标穿透(光标不在标题栏时点击落到下层窗口,标题栏按钮与拖动照常可用)、调透明度(0–90%);Esc / q 收起,托盘菜单「htop 窗口」开关
  • 实时指标:CPU 占用率、内存占用率、磁盘吞吐、网络吞吐,附 CPU / 磁盘 / 网络三条历史曲线
  • 设置窗口:采样间隔、显示项、配色、托盘图标组合、告警阈值、边缘细条与开机自启,界面中英双语,改完立即生效
  • 资源告警(默认关):CPU / 内存 / 磁盘已用可各自设阈值,连续超阈值一段时间才算数,气泡提示带冷却;告警期间悬浮窗对应行转红,托盘图标不参与告警表现
  • 轻量采集:kernel32 + PDH 原生调用,不依赖 WMI,1 秒采样(可配 0.5–5 秒);磁盘容量按 60 秒降频刷新
  • 环境体检:非交互会话 / Server Core 下明确提示并退出;PDH 被裁剪时界面标注「不可用」,不假装是 0
  • 免安装:自包含单文件发布(x64 / ARM64),目标机无需预装 .NET;另提供不含运行时的精简版(0.3 MB)
  • 开机自启:以「用户登录触发的计划任务」实现,适配服务器多会话场景

运行环境

项 要求
操作系统 Windows Server 2019 / 2022 / 2025,或 Windows 10 1809 及以上
最低版本 10.0.17763(由 [assembly: SupportedOSPlatform] 编译期约束)
桌面体验 需要(Server Core 无桌面外壳,托盘与悬浮窗不可用)
运行时 自包含版无需预装;精简版需 .NET 10 Desktop Runtime
架构 x64 / ARM64(ARM64 为交叉编译产出)
权限 普通用户即可,无需管理员

快速开始

# 构建
dotnet build -c Release

# 运行
.\src\MSysMonitor\bin\Release\net10.0-windows\MSysMonitor.exe

# 发布:x64 / ARM64 × 自带 / 不自带运行时,共 4 个变体
powershell -File build/publish.ps1

# 只要其中一个
powershell -File build/publish.ps1 -Arch x64 -Flavor selfcontained
产物 架构 运行时 体积
artifacts\win-x64-selfcontained\MSysMonitor-win-x64-selfcontained.exe x64 自带 71.2 MB
artifacts\win-x64-framework\MSysMonitor-win-x64-framework.exe x64 不自带 0.3 MB
artifacts\win-arm64-selfcontained\MSysMonitor-win-arm64-selfcontained.exe ARM64 自带 66.8 MB
artifacts\win-arm64-framework\MSysMonitor-win-arm64-framework.exe ARM64 不自带 0.3 MB

使用

操作 说明
左键单击托盘图标 显示 / 隐藏悬浮窗
右键托盘图标 悬浮窗显隐、htop 窗口开关、托盘图标显示方案、开机自启、设置…、退出
拖动悬浮窗 移动位置(未锁定时),自动保存
右键悬浮窗 始终置顶、锁定位置、点击穿透、设置…、退出

设置保存在 %ProgramData%\MSysMonitor\settings.json(整机共享,首次启动会从旧的 %LOCALAPPDATA% 位置自动迁移)。 日常使用建议直接开设置窗口改,不要手改 JSON —— 枚举值写错会被判为损坏文件、静默回退默认值。

目录结构

MSysMonitor.slnx
README.md
build/check.ps1                提交/发布前的本地校验(编译 + 冒烟)
build/publish.ps1              发布脚本(4 变体:x64/ARM64 × 自带/不自带运行时)
build/release.ps1              把产物发到 AtomGit 发行版(建 tag + 传附件)
doc/                           开发文档
src/MSysMonitor/
├── AssemblyAttributes.cs      最低系统版本约束
├── app.manifest               PerMonitorV2 DPI 感知
├── App.xaml(.cs)              单实例保护 + 组件装配
├── Core/                      采样、数据模型、设置、自启动、历史、显示器、环境体检、本地化
├── Native/                    kernel32 / user32 / PDH 封装
├── Resources/                 Strings.resx(中性=中文)+ Strings.en.resx
├── UI/                        托盘图标渲染与控制器、本地化标记扩展
└── Views/                     悬浮窗、边缘细条、htop 窗口、设置窗口与视图模型

文档

文档 内容
doc/README.md 文档索引与阅读顺序
01-项目概述 目标、范围、运行环境约束
02-技术选型 选型对比与决策记录
03-架构设计 分层、模块职责、数据流、线程模型
04-数据采集 各指标采集方式与降级策略
05-托盘与悬浮窗 UI 实现细节与已知限制
06-构建发布与部署 构建、体积优化、部署与运维
07-开发计划 版本规划与待验证项

已知限制

  • GPU 监控明确不做(服务器场景基本不可用;保持简洁)
  • 温度 / 风扇等硬件指标明确不做(Windows 上需内核驱动或第三方软件常驻)
  • 历史数据落盘与报表明确不做(保持简洁)
  • 进程列表只在 htop 窗口打开时采集(2 秒一次),窗口收起即停止;不做进程数据的历史落盘
  • htop 窗口的三个开关(钉住 / 穿透 / 透明度)不持久化,重新打开回到默认;窗口显隐与位置会记住
  • 多显示器只做"位置校验 + 边缘细条可指定显示器",不会把悬浮窗自动挪到鼠标所在屏
  • 开启「点击穿透」后悬浮窗收不到鼠标事件(不能拖动、不能右键),需从托盘菜单关掉
  • 尚未在 Windows Server 2019 实机验证(PDH 计数器是否被裁剪未知)
  • 告警气泡受系统通知设置影响(专注助手开启 / 通知关闭时不显示);此时告警仍生效,悬浮窗对应行会转红

开发要求

  • .NET 10 SDK(10.0.302 或更高)
  • Visual Studio 2026 v18.0+(.NET 10 SDK 所需的最低 VS 版本),或使用 dotnet CLI / VS Code + C# Dev Kit

WPF 不支持 NativeAOT 与 PublishTrimmed,自包含发布只能走 ReadyToRun;框架依赖变体不能开 R2R(会崩在启动阶段),见 06。

许可证

MIT © 2026 hearkenundermoon

发布产物目前没有代码签名,Windows Defender 可能按启发式误报 (实测出现过 Trojan:Win32/Sabsik.FL.A!ml)。确认文件来自本仓库 Release 页即可放行, 或向 微软误报申诉 提交样本。

Introduction

用于 Windows 服务器运维时常驻监控主机负载,快速发现资源瓶颈。项目提供动态托盘图标、半透明悬浮窗、屏幕边缘细条和历史曲线,基于 PDH 轻量采集 CPU、内存、磁盘与网络指标,支持免安装单文件部署。【此简介由AI生成】

Customize your domain