API 获取硬件信息详解
操作系统支持的硬件信息 API
不同操作系统提供不同的 API 或工具来获取硬件信息,以下是主流系统的实现方式:

| 操作系统 | 核心 API/工具 | 功能范围 |
|---|---|---|
| Windows | WMI (Windows Management Instrumentation) |
CPU、内存、硬盘、主板、显卡等 |
| Linux | /proc 文件系统、lscpu、lshw 命令 |
CPU、内存、硬盘、网络设备等 |
| macOS | system_profiler 命令、IOKit 框架 |
CPU、内存、硬盘、传感器等 |
| 跨平台 | psutil(Python 库)、System.Info(.NET) |
通用硬件信息(需依赖底层系统 API) |
主流编程语言实现方案
Python 实现(推荐 psutil 库)
核心功能
| 功能 | API 方法 | 返回值 |
|---|---|---|
| CPU 信息 | cpu_count(), cpu_freq() |
核心数、频率 |
| 内存信息 | virtual_memory() |
总内存、可用内存、使用率 |
| 硬盘信息 | disk_partitions(), disk_usage() |
分区列表、容量、挂载点 |
| 网络信息 | net_if_addrs() |
IP 地址、网卡名称、掩码 |
| 传感器温度 | sensors_temperatures() |
仅支持部分 Linux 系统(需 lm-sensors) |
示例代码
import psutil
# 获取 CPU 信息
cpu_count = psutil.cpu_count(logical=False) # 物理核心数
cpu_freq = psutil.cpu_freq().max # 最大频率(MHz)
# 获取内存信息
mem = psutil.virtual_memory()
total_mem = mem.total / (1024 ** 3) # 转换为 GB
# 获取硬盘信息
disk = psutil.disk_usage('/')
disk_free = disk.free / (1024 ** 3) # 剩余空间(GB)
print(f"CPU: {cpu_count} 核,最高频率 {cpu_freq}MHz")
print(f"内存: {total_mem:.2f}GB,剩余 {disk_free:.2f}GB")
Windows WMI 查询(PowerShell/C#)
常用 WMI 类
| WMI 类 | 功能 |
|---|---|
Win32_Processor |
CPU 型号、核心数、线程数 |
Win32_PhysicalMemory |
内存容量、插槽数量 |
Win32_DiskDrive |
硬盘型号、容量、序列号 |
Win32_NetworkAdapter |
网卡名称、MAC 地址、IP 配置 |
PowerShell 示例
# 获取 CPU 信息 Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed # 获取硬盘信息 Get-WmiObject -Class Win32_DiskDrive | Select-Object Model, Size, SerialNumber
Linux 系统命令与文件
关键命令与文件
| 命令/文件 | 功能 |
|---|---|
lscpu |
输出 CPU 详细信息(架构、核心数、频率) |
lshw |
列举所有硬件信息(需超级用户权限) |
/proc/meminfo |
内存使用详情(单位 kB) |
df -h |
磁盘分区容量与使用率 |
ifconfig |
网络接口配置(IP、MAC 地址) |
示例:解析 /proc/cpuinfo
# 提取 CPU 核心数
grep -m 1 "cpu cores" /proc/cpuinfo | awk '{print $4}'
# 提取 CPU 型号
grep "model name" /proc/cpuinfo | head -n 1 | cut -d":" -f2 | xargs
注意事项
- 权限问题:
- Windows 部分 WMI 查询需要管理员权限。
- Linux 下
lshw需使用sudo。
- 跨平台兼容性:
- 推荐使用
psutil(Python)或System.Info(.NET)实现跨平台。
- 推荐使用
- 性能开销:
避免频繁调用硬件查询 API(如每秒多次),可能增加系统负载。
- 虚拟化环境限制:
在虚拟机中部分硬件信息(如主板型号、物理硬盘序列号)可能不可用。

相关问题与解答
问题 1:如何获取网络适配器的实时流量?
解答:
可使用 psutil.net_io_counters()(Python)或 Get-WmiObject -Class Win32_NetworkAdapter(PowerShell)。
示例(Python):
import psutil
net = psutil.net_io_counters()
print(f"发送流量: {net.bytes_sent / (1024 ** 2):.2f} MB")
print(f"接收流量: {net.bytes_recv / (1024 ** 2):.2f} MB")
问题 2:如何检测 CPU 是否支持超线程技术?
解答:

- Windows:对比
Win32_Processor.NumberOfCores(物理核心数)与Win32_ComputerSystem.NumberOfLogicalProcessors(逻辑核心数),若逻辑核心数 > 物理核心数则支持超线程。 - Linux:通过
lscpu命令查看Thread(s) per core,若值大于
以上就是关于“api 获取硬件信息”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!