惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
Latest news
Latest news
G
GRAHAM CLULEY
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
The Exploit Database - CXSecurity.com
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
U
Unit 42
人人都是产品经理
人人都是产品经理
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Cisco Blogs
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Know Your Adversary
Know Your Adversary
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 热门话题
The Hacker News
The Hacker News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
T
Threat Research - Cisco Blogs
The GitHub Blog
The GitHub Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Cloudbric
Cloudbric
Scott Helme
Scott Helme
J
Java Code Geeks
H
Hacker News: Front Page
N
News and Events Feed by Topic
Recorded Future
Recorded Future
Martin Fowler
Martin Fowler
W
WeLiveSecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
量子位
有赞技术团队
有赞技术团队

博客园 - 陈大欠

andrej karpathy skills 从 Harness Engineering 到 superpowers 从 Harness Engineering 到 OpenSpec 从 Harness Engineering 到 Trellis Harness Engineering copilot-api:让 ClaudeCode 接入 Github Copilot Claude Code Hooks 配置说明 Scoop Claude-LED Windows Terminal & PowerShell 玩转 Visual Studio 外部工具 WCF API 语义搜索工具 Step Builder:让对象构建有顺序、有边界、有校验 基于 Attribute 的 AOP 字段校验 浅析 .NET 响应式编程 IObservable与ReactiveX Cron表达式简明教程 正则表达式拾遗 快速批量升级 NugetPackage 版本 C# IEquatable和IEqualityComparer 最佳实践 使用XDT提高开发效率 如何保证XML正确性 分析 Dump 入门简明教程 Git commit emoji 对照表 ELK Stack 笔记 HTML5/CSS3(PrefixFree.js) 3D文字特效 Jquery实现图片上下一张 js css 构建滚动边框 使用jquery构建Metro style 返回顶部 使用js实现移动设备访问跳转到指定目录 从一幅图中了解开源世界 Jquery ajax 学习笔记 工欲善其事必先利其器系列之:在VS里面折叠js代码
MagicCenterHub
陈大欠 · 2026-07-18 · via 博客园 - 陈大欠

MagicCenterHub 🚦

PixPin_2026-06-13_19-40-09

Windows 桌面系统监控悬浮窗,实时显示硬件指标 + Claude Code hook LED 灯效指示。

English

.NET 8
WPF
Windows
GitHub Release
Build Status
License
GitHub Stars
GitHub Downloads
GitHub Last Commit

功能特性

硬件监控

  • CPU — 使用率、温度
  • GPU — 使用率、温度
  • 内存 — 已用/总量、使用率百分比
  • 电池 — 功耗
  • 磁盘 — 读取/写入速率
  • 网络 — 上传/下载速率

LED 灯效指示

三色 LED(红/黄/绿)实时反映 Claude Code 工具调用状态,支持 20 种灯效模式:

编号 模式 说明
0 全灭 三灯熄灭
1 同闪 三灯同频闪烁
2 绿闪 绿灯闪烁
3 红闪 红灯闪烁
4 黄闪 黄灯闪烁
5 绿亮 绿灯常亮
6 红亮 红灯常亮
7 黄亮 黄灯常亮
8 全亮 三灯常亮
9 警车 红绿交替 + 黄灯独立快闪
10 心跳 模拟心脏律动
11 SOS 摩尔斯求救码
12 呼吸 三色轮转呼吸灯
13 萤火虫 三灯独立混沌呼吸
14 心电 ECG 波形模拟
15 跑马 三色追逐爆闪
16 爆闪 绿→黄→红依次爆闪
17 太极 阴阳消长呼吸
18 HELLO 摩尔斯码广播
19 雷达 扫描与锁定

Hook 事件映射

Claude Code 事件 LED 模式 通知
PreToolUse 2 - 绿闪
UserPromptSubmit 2 - 绿闪
PermissionRequest 4 - 黄闪
PostToolUseFailure 3 - 红闪
Stop 5 - 绿亮
SessionStart 17 - 太极
SessionEnd 17 - 太极
Notification BurntToast Windows 通知

LED 映射在 hooks/claude-code-settings-example.json 中配置,应用本身不硬编码事件映射。
通知事件通过 Notification hook 使用 BurntToast 弹出 Windows 通知。

技术栈

  • 语言:C# 7.3 (.NET 8, net8.0-windows)
  • UI:WPF
  • 硬件数据源:HWiNFO64 共享内存 (Global\HWiNFO_SENS_SM2)
  • 序列化:Newtonsoft.Json
  • 编码:System.Text.Encoding.CodePages (GBK)

项目结构

src/MagicCenterHub/
├── App.xaml / App.xaml.cs              # 入口:单实例、托盘图标、开机自启
├── MainWindow.xaml / .cs               # 主窗口:1428x284 布局、LED 动画循环
├── LedTestWindow.xaml / .cs            # LED 灯效测试窗口
├── SettingsWindow.xaml / .cs           # 设置窗口
├── Utils/
│   ├── PercentToWidthConverter.cs      # 进度条百分比→宽度转换器
│   └── IconHelper.cs                   # 图标生成工具
├── Models/
│   ├── Settings.cs                     # 配置模型
│   ├── HardwareData.cs                 # 硬件数据模型
│   └── LedMode.cs                      # 20 种灯效枚举
├── Services/
│   ├── SettingsService.cs              # JSON 配置持久化
│   ├── HwInfoProvider.cs               # HWiNFO 共享内存读取器
│   ├── HardwareMonitorService.cs       # 1 秒定时采集
│   └── NamedPipeListenerService.cs     # 命名管道 hook 监听
├── Effects/
│   ├── ILedEffect.cs                   # 灯效接口
│   ├── LedEffects.cs                   # 20 种灯效实现
│   └── LedEffectFactory.cs             # 工厂模式创建灯效
├── ViewModels/
│   └── MainViewModel.cs                # 数据绑定 + 三档颜色
├── Resources/
│   ├── MagicCenterHub.ico              # 托盘图标
│   └── Claude.png                      # 通知图标
└── hooks/
    ├── send-hook.ps1                   # Hook 脚本:通过命名管道控制 LED
    ├── claude-code-settings-example.json  # Claude Code hooks 配置示例
    └── sound-test.ps1                  # 音效测试工具

配置

配置文件路径:%AppData%\MagicCenterHub\settings.json

字段 说明 默认值
WindowLeft 窗口 X 坐标(-1 = 自动定位) -1
WindowTop 窗口 Y 坐标(-1 = 自动定位) -1
WindowTopMost 窗口置顶 true
PollIntervalMs HWiNFO 采集间隔(毫秒) 3000
CpuMaxTempC CPU 温度上限 100
GpuMaxTempC GPU 温度上限 95
ColorThresholds.UsageGreen 使用率绿色阈值 50
ColorThresholds.UsageYellow 使用率黄色阈值 80
ColorThresholds.TempGreen 温度绿色阈值 60
ColorThresholds.TempYellow 温度黄色阈值 80
PositionPresets 窗口位置预设列表 []
DefaultLedMode 默认 LED 灯效模式(0-19,启动时应用,空闲时恢复) 17
LedIdleRestoreSeconds LED 灯效空闲恢复时间(秒),0 表示不自动恢复 0

前置要求

  1. HWiNFO64 — 运行并启用 Shared Memory Support
  2. 管理员权限 — 访问全局共享内存需要管理员权限
  3. Lenovo MagicBay HUD — 副屏小显示器,参见 Lenovo MagicBay HUD

HUD 自动启动

当 Lenovo MagicBay HUD 连接时自动启动 MagicCenterHub,断开时自动关闭。

脚本路径:Scripts/Monitor-HUD.ps1

工作原理

  1. HUD 拔掉时,Windows 在 Microsoft-Windows-Kernel-PnP/Device Management 日志中记录事件 ID 1010(设备移除)
  2. 任务计划程序监听该事件,触发脚本执行
  3. 脚本立即杀掉 MagicCenterHub 进程
  4. 然后每 2 秒轮询一次(最长 120 秒),等待设备重新出现
  5. 检测到设备重新连接后,等待 10 秒完成设备初始化,再启动 MagicCenterHub
  6. 登录触发器会在用户登录时额外检查一次,处理开机时设备已连接的情况

创建计划任务(手动)

管理员身份运行 PowerShell:

$AppPath = "D:\Source\Repos\MagicCenterHub\src\MagicCenterHub\bin\Debug\net8.0-windows\MagicCenterHub.exe"
$ScriptPath = "D:\Source\Repos\MagicCenterHub\Scripts\Monitor-HUD.ps1"

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-WindowStyle Hidden -ExecutionPolicy Bypass -File `"$ScriptPath`""

# 事件触发器:设备移除时触发(事件 ID 1010)
$CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler
$eventTrigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly
$eventTrigger.Subscription = '<QueryList><Query Id="0" Path="Microsoft-Windows-Kernel-PnP/Device Management"><Select Path="Microsoft-Windows-Kernel-PnP/Device Management">*[System[(EventID=1010)]] and *[EventData[Data[@Name="DeviceInstanceId"] and (Data="USB\VID_17EF&amp;PID_1117\20616172")]]</Select></Query></QueryList>'
$eventTrigger.Delay = "PT5S"
$eventTrigger.Enabled = $true

$loginTrigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit ([TimeSpan]::FromSeconds(30))

Register-ScheduledTask -TaskName "Monitor-HUD" -Action $action -Trigger @($eventTrigger, $loginTrigger) -Settings $settings -Force

打包发布

在仓库根目录执行,输出到 publish/ 目录。两种方式均排除 .pdb 调试符号文件。

# 框架依赖(体积小,目标机器需安装 .NET 8 Desktop Runtime)
dotnet publish src/MagicCenterHub/MagicCenterHub.csproj -c Release `
  -o publish/framework-dependent `
  -p:DebugType=none -p:DebugSymbols=false

# 独立部署(体积大,无需安装 .NET 即可运行)
dotnet publish src/MagicCenterHub/MagicCenterHub.csproj -c Release `
  -o publish/self-contained `
  -r win-x64 --self-contained true `
  -p:DebugType=none -p:DebugSymbols=false

运行 publish/framework-dependent/MagicCenterHub.exepublish/self-contained/MagicCenterHub.exe

命名管道协议

  • 管道名:\\.\pipe\ClaudeCodeMagicCenterHub
  • 消息格式:{"ledMode": N}(N = 0-19,灯效模式编号)
  • 测试命令:powershell -File send-hook.ps1 -LedMode 2

事件到灯效编号的映射在 hooks/claude-code-settings-example.json 中配置。

Contributors

Star History

Star History Chart