English | 简体中文
- 🔄 多后端集成 - 支持 OpenHardwareMonitor、AIDA64、sysinfo 等多种监控方案
- 🌍 跨平台支持 - 完整支持 Windows,基础支持 Linux/MacOS
- 📊 丰富的监控指标 - CPU、GPU、内存、硬盘、主板等全方位监控
- ⚡ 实时数据采集 - 毫秒级的硬件状态监控
- 🔌 统一接口 - 简洁的命令行工具与 Rust API
- 🛠 可扩展架构 - 轻松扩展新的监控后端
- 📈 性能优化 - 低资源占用,高效数据处理
cargo install hw
git clone https://github.com/eternalnight996/hw.git
cd hw
cargo install just
just
命令区别说明:
- data: 仅返回传感器当前值
- print: 返回完整统计信息,但不做验证
- check: 进行值范围验证和负载测试
10
: 测试次数2000
: 目标值3000
: 误差范围 (-1000~5000)100
: CPU负载百分比
[dependencies]
# 所有特性
hw = {version="0.1"}
# 打包所有特性
hw = {version="0.1",feature=["build","built"]}
# 只用OHM
hw = {version="0.1", default-features = false, feature=["ohm"]}
# 命令行则加上cli
# 日志 支持 log 和 tracing, cli则默认支持println输出
hw = {version="0.1", default-features = false, feature=["ohm","cli","log"]}
- data命令 - 仅返回当前值
hw --api OS --task data --args CPU Clock
Compiling hw v0.1.2 (D:\MyApp\hw)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.18s
Running `target\x86_64-pc-windows-msvc\debug\hw.exe --api OHM --task data --args CPU Clock`
Started OpenHardwareMonitor.exe with PID: 5332
Loading... (100%/100%)
...
--------------------------------
平均值(1068MHz 0.0%) 数据:1068
关闭负载
=== 总结 -> CPU 中央处理器 ===
--- 传感器 -> Clock 频率 MHz ---
结果: PASS
数据: 1068
目标: 0.0 MHz
平均: 1068.0 MHz
最低: 901.2 MHz
最高: 1101.5 MHz
次数: 1
错误次数: 0
负载: 0.0%
平均负载: 0.0%
允许误差: ±0.0
允许范围: 0.0 ~ 0.0 MHz
====================
R<{"content":"1068","status":true,"opts":null}>R
- print命令 - 返回完整统计信息
hw --api OHM --task print --full --args CPU Clock
...
R<{"content":"{\"api\":\"OHM\",\"hw_type\":\"CPU\",\"sensor_type\":\"Clock\",\"res\":\"PASS\",\"data\":\"1102\",\"min\":1101.5174560546875,\"max\":1101.5174560546875,\"avg\":1102.0,\"total\":6609.104736328125,\"samples\":6,\"test_secs\":0,\"error_count\":0,\"load\":{\"min\":0.0,\"max\":0.0,\"avg\":0.0,\"total\":0.0,\"status\":[]},\"status\":[...]}","status":true,"opts":null}>R
- check命令 - 进行值范围验证和负载测试
hw --api OHM --task check --full --args CPU Clock -- 10 2000 3000 100
...
--- 第 10 秒中央处理器状态 ---
CPU Core #1 - 当前=2904.0 MHz(频率) 误差: ±3000.0
CPU Core #6 - 当前=2904.0 MHz(频率) 误差: ±3000.0
CPU Core #5 - 当前=2904.0 MHz(频率) 误差: ±3000.0
CPU Core #4 - 当前=2904.0 MHz(频率) 误差: ±3000.0
CPU Core #3 - 当前=2904.0 MHz(频率) 误差: ±3000.0
CPU Core #2 - 当前=2904.0 MHz(频率) 误差: ±3000.0
--------------------------------
平均值(2904MHz 99.0%) 数据:2904
关闭负载
=== 总结 -> CPU 中央处理器 ===
--- 传感器 -> Clock 频率 MHz ---
结果: PASS
数据: 2904
目标: 2000.0 MHz
平均: 2904.0 MHz
最低: 2904.0 MHz
最高: 2904.0 MHz
次数: 10
错误次数: 0
负载: 100.0%
平均负载: 99.0%
允许误差: ±3000.0
允许范围: -1000.0 ~ 5000.0 MHz
====================
R<{"content":"{\"api\":\"OHM\",\"hw_type\":\"CPU\",\"sensor_type\":\"Clock\",\"res\":\"PASS\",\"data\":\"2904\",\"min\":2904.000732421875,\"max\":2904.001708984375,\"avg\":2904.0,\"total\":174240.07470703125,\"samples\":60,\"test_secs\":0,\"error_count\":0,\"load\":{\"min\":0.0,\"max\":0.0,\"avg\":99.0,\"total\":5946.0,\"status\":[]},\"status\":[...]}","status":true,"opts":null}>R
# CPU温度监控
hw --api OHM --task check --args CPU Temperature
# CPU频率测试 (5次, 目标3000MHz, 误差±2000MHz, 100%负载)
hw --api OHM --task check --args CPU Clock -- 5 3000 2000 100
# 风扇转速测试 (5次, 目标3000RPM, 误差±2000RPM)
hw --api OHM --task check --args ALL Fan -- 5 3000 2000
# 系统整体状态
hw --api OS --task print
# CPU负载监控
hw --api OS --task check --args CPU Load
# 内存使用率监控
hw --api AIDA64 --task check --args RAM Load
# CPU核心电压监控
hw --api AIDA64 --task check --args CPU Voltage
# 获取系统完整信息
hw --api OSMore --task OsFullVersion
# 获取内存大小
hw --api OSMore --task MemoryTotal
# 获取计算机名
hw --api OSMore --task HostName
# 获取OS版本
hw --api OSMore --task OsVersion
# 获取Office版本
hw --api OSOffice --task check-with-cache --args V2016 test
# 激活系统
hw --api OSSystem --task active --args XXXXX-XXXXX-XXXXX-XXXXX-XXXXX activation_temp
# 检查系统激活状态并查询激活码缓存
hw --api OSSystem --task check-with-cache --args activation_temp
# 导出DLL|SO动态链接库
hw --api FileInfo --task copy-lib --args target/debug/hw.exe target/debug/_libs
# 打印文件节点
hw --api FileInfo --task print --args target/debug/hw.exe
# 打印文件节点
hw --api FileInfo --task nodes --args target/debug/hw.exe
# 测试PING
hw --api OSMore --task NetManage --args ping 127.0.0.1 baidu.com 3
# 测试PING节点
hw --api OSMore --task NetManage --args ping-nodes baidu.com 3 -- ~is_connected Ethernet
# 设置DHCP ~is_connected 是指正在连接的网卡
hw --api OSMore --task NetManage --args dhcp -- ~is_connected
# 设置静态IP
hw --api OSMore --task NetManage --args set-ip 192.168.1.100 255.255.255.0 192.168.1.1 -- "以太网"
# 设置DNS Ethernet=类型 "以太网"=名称 ~is_connected=网卡
hw --api OSMore --task NetManage --args set-dns 223.5.5.5 114.114.114.114 "以太网" Ethernet ~is_connected
# 桌面节点
hw --api OSMore --task Desktop --args nodes
# 打印
hw --api OSMore --task Desktop --args print
# 扫描驱动
hw --api Drive --task scan
# 驱动打印
hw --api Drive --task print -- =net "*I225-V #6"
hw --api Drive --task print -- "@pci*" "*I225-V #6"
hw --api Drive --task print -- "@pci*" "PCI*" "*E0276CFFFFEEA86B00"
# --full 完整数据 但更消耗资源,建议加=和@去筛选
hw --api Drive --task print --full -- =net "*I225-V #6"
# 驱动节点
hw --api Drive --task nodes -- =net
# 导出驱动
hw --api Drive --task export --args oem6.inf D:\\drives
hw --api Drive --task export --args oem*.inf .
# 重启驱动
hw --api Drive --task restart -- =net "Intel(R) Ethernet Controller (3) I225-V #5"
hw --api Drive --task restart -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# 启用驱动
hw --api Drive --task enable -- =net "Intel(R) Ethernet Controller (3) I225-V #5"
# 禁用驱动
hw --api Drive --task disable -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# 删除驱动
hw --api Drive --task delete -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# 增加驱动
hw --api Drive --task add --args D:\\drives\\oem6.inf /install
# 增加驱动文件夹
hw --api Drive --task add-folder --args D:\\drives /install
# 检查驱动状态
hw --api Drive --task check-status
# 检查驱动状态并打印
hw --api Drive --task print-status
# 检查驱动状态并打印完整
hw --api Drive --task print-status --full
# 检查驱动状态并打印节点
hw --api Drive --task print-status --nodes
# 检查驱动状态并打印节点完整
hw --api Drive --task print-status --nodes --full
# 同步时间
hw --api OSMore --task NetManage --args sync-datetime time.windows.com
# "~Less100" 速度小于100
# "~100" 速度大于等于100
# "~1000" 速度大于等于1000
# "~Big1000" 速度大于等于10000
# "~is_connected" 正在连接
# "~has_dhcp_ip" 有DHCP IP
# 检查MAC重复和初始化
hw --api OSMore --task NetInterface --args check-mac "*I225-V #1" -- ~has_dhcp_ip
# 网络接口
hw --api OSMore --task NetInterface --args print -- ~has_dhcp_ip
# 网络接口节点
hw --api OSMore --task NetInterface --args nodes -- ~has_dhcp_ip
# 获取磁盘数据
hw --api Disk --task data --args C:
# 获取磁盘挂载树
hw --api Disk --task mount-tree --args C:
# 检查磁盘负载
hw --api Disk --task check-load --args 10 90
Backend | Windows | Linux | MacOS | Status | Description | 支持功能 |
---|---|---|---|---|---|---|
OHM | 100% | 0% | 0% | 已完成 | 获取硬件传感器数据 完成所有功能开发 |
HardwareType(硬件类型),SensorType(传感器类型) |
AIDA64 | 100% | 0% | 0% | 已完成 | 获取硬件传感器数据 完成所有功能开发 |
HardwareType(硬件类型),SensorType(传感器类型) |
OS | 10% | 10% | 10% | 测试中 | 接口Rust system跨平台基础功能可用 支持更多的信息获取 |
CPU,RAM |
OSMore | 70% | 70% | 70% | 已完成 | 主要用于获取更多信息和管理 | MemoryTotal(内存大小),CpuCoreCount(CPU内核数量),OsVersion(系统版本) OsFullVersion(系统版本),KernelVersion(内核版本),HostName(主机名),Uptime(开机时间) CpuUsage(CPU使用率),MemoryUsage(内存使用率),CpuArch(CPU架构),UserNames(用户名), NetInterface(网络接口),NetManage[网络管理(DHCP、PING、同步时间、静态IP配置)],Desktop(桌面),Drive(硬盘), |
Drive | 100% | 0% | 0% | 已完成 | 对接PNPUTIL和devcon | scan(扫描),add-folder(添加文件),add(添加),delete(删除),delete-find(删除并查找), print(打印),nodes(节点),restart(重启),enable(启用),disable(禁用),remove(移除),export(导出) |
FileInfo | 100% | 99% | 99% | 已完成 | 获取文件的依赖dll或so,支持一键导出依赖 | copy-lib(复制依赖),print(打印),nodes(列表) |
OSSystem | 100% | 0% | 0% | 已完成 | 系统 | check(检查),check-with-cache(检查并缓存),activate(激活),deactivate(注销),kms(注册kms),clear-kms(清理kms),clear-cache(清理缓存),cache-kms(缓存激活码) |
OSOffice | 90% | 0% | 0% | 已完成 | Office | check(检查),check-with-cache(检查并缓存),activate(激活),kms(注册kms),clear-kms(清理kms),clear-cache(清理缓存),cache-kms(缓存激活码) |
Note:
- OpenHardwareMonitor (OHM) 和 AIDA64 仅支持 Windows 平台
- sysinfo 支持跨平台但功能相对有限
- 具体传感器支持可能因硬件而异
Sensor Type | Unit | Format | Description |
---|---|---|---|
Clock | MHz | {value} MHz | 处理器、内存等时钟频率 |
Temperature | °C | {value} °C | CPU、GPU、主板等温度 |
Load | % | {value}% | 处理器负载、内存使用率 |
Fan | RPM | {value} RPM | 风扇转速 |
Voltage | V | {value} V | 各种电压值 |
Power | W | {value} W | 功率消耗 |
Flow | L/h | {value} L/h | 液体冷却流量 |
Control | % | {value}% | 风扇控制等级 |
Level | % | {value}% | 电池电量等级 |
Data | B | {value} B | 数据大小 |
GBData | GB | {value} GB | 大容量数据 |
Throughput | B/s | {value} B/s | 数据吞吐量 |
DataRate | B/s | {value} B/s | 数据传输速率 |
SmallData | B | {value} B | 小数据�� |
GBSmallData | GB | {value} GB | 大容量小数据包 |
FSB | MHz | {value} MHz | 前端总线频率 |
Multiplexer | MHz | {value} MHz | 倍频器 |
ClockAverage | MHz | {value} MHz | 平均时钟频率 |
Hardware Type | Description | Common Sensors |
---|---|---|
CPU | 中央处理器 | Clock, Temperature, Load, Power |
RAM | 内存 | Data, Load, Clock |
Mainboard | 主板 | Temperature, Voltage, Fan |
GpuNvidia | NVIDIA显卡 | Clock, Temperature, Load, Fan |
GpuAti | AMD/ATI显卡 | Clock, Temperature, Load, Fan |
HDD | 硬盘驱动器 | Temperature, Load, Data |
SuperIO | Super I/O芯片 | Fan, Temperature, Voltage |
TBalancer | T-Balancer设备 | Fan, Flow, Temperature |
Heatmaster | Heatmaster设备 | Fan, Flow, Temperature |
- OpenHardwareMonitor: v0.9.6
- AIDA64: v7.40.7100
- sysinfo: v0.33
如果是用OHM 或 AIDA64接口,程序先会检查进程是否存在;
如果不存在则会检查当前目录是否存在 OpenHardwareMonitor.exe
或 aida64.exe
AUTOTEST2.exe
在硬件监控领域,我们经常遇到以下挑战:
- 不同平台的监控接口差异大
- Windows下传感器数据获取复杂
- 支持Rust
- 缺乏统一的数据访问方式
- 多种监控工具切换繁琐
- 自动化测试支持有限
本工具致力于解决这些问题,提供:
- 命令行工具: 简单直观的 CLI 命令
- Rust API: 原生的 Rust 编程接口
- WMI 支持: Windows 平台的 WMI 查询能力
- Rust 支持: Rust直接调用LIB
- 统一数据格式: 标准化的数据输出
- Windows: 完整的传感器支持 (OHM/AIDA64)
- Linux: 基础系统信息监控 (sysinfo)
- MacOS: 基础系统信息监控 (sysinfo)
- 自动化测试: 支持自动化硬件测试场景
- 数据采集: 灵活的数据收集和导出
- 监控告警: 可配置的阈值监控
- 扩展接口: 支持自定义监控后端
- 零配置: 最小化配置需求
- 快速部署: 单文件执行程序
- 向后兼容: 保持 API 稳定性
- 完整文档: 详细的使用说明
-
硬件测试
- 产品质量验证
- 性能基准测试
- 稳定性测试
-
系统监控
- 服务器状态监控
- 工作站性能分析
- 温控系统监测
-
开发调试
- 硬件驱动开发
- 性能优化分析
- 问题诊断
-
自动化集成
- CI/CD 管道集成
- 自动化测试脚本
- 监控系统对接
💡 设计理念:
- 简单易用优先
- 统一接口标准
- 跨平台兼容
- 可扩展架构
我们欢迎任何形式的贡献!
- 提交 Issue 报告 bug 或提出新功能建议
- 提交 Pull Request 改进代码
- 完善项目文档
- 分享使用经验
在提交 PR 之前,请确保:
- 代码符合项目规范
- 添加必要的测试
- 更新相关文档
本项目采用 MIT 和 Apache 2.0 双重协议。
Built with ❤️ by eternalnight996 and contributors.