feat(hardware): 自 go-hua 迁入硬件信息采集与变更检测

- WMI 采集主板/BIOS/显卡/内存/CPU/硬盘等 11 类设备 + 变更比对
- 新增依赖 gopsutil/yusufpapurcu/wmi, 附测试、例程与 README
This commit is contained in:
2026-09-20 12:29:36 +08:00
parent ef7cd3e3c4
commit 138c929bd4
7 changed files with 708 additions and 0 deletions
+138
View File
@@ -0,0 +1,138 @@
//go:build windows
package hardware
import (
"github.com/yusufpapurcu/wmi"
)
// https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/computer-system-hardware-classes
// GetBaseBoardInfo 主板信息
func GetBaseBoardInfo() ([]BaseBoard, error) {
info := make([]BaseBoard, 0)
err := wmi.Query("SELECT * FROM Win32_BaseBoard WHERE (Product IS NOT NULL)", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetBiosInfo BIOS信息
func GetBiosInfo() ([]Bios, error) {
info := make([]Bios, 0)
err := wmi.Query("SELECT * FROM Win32_BIOS WHERE (Name IS NOT NULL)", &info) // WHERE (BIOSVersion IS NOT NULL)
if err != nil {
return nil, err
}
return info, nil
}
// GetVideoControllerInfo 显卡信息
func GetVideoControllerInfo() ([]VideoController, error) {
info := make([]VideoController, 0)
err := wmi.Query("SELECT * FROM Win32_VideoController WHERE (Name IS NOT NULL)", &info) // WHERE (BIOSVersion IS NOT NULL)
if err != nil {
return nil, err
}
return info, nil
}
// GetPhysicalMemoryInfo 物理内存
func GetPhysicalMemoryInfo() ([]PhysicalMemory, error) {
info := make([]PhysicalMemory, 0)
err := wmi.Query("SELECT * FROM Win32_PhysicalMemory", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetProcessorInfo 处理器
func GetProcessorInfo() ([]Processor, error) {
info := make([]Processor, 0)
err := wmi.Query("SELECT * FROM Win32_Processor", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetDiskDriveInfo 硬盘
func GetDiskDriveInfo() ([]DiskDrive, error) {
info := make([]DiskDrive, 0)
err := wmi.Query("SELECT * FROM Win32_DiskDrive", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetSoundDeviceInfo 声卡
func GetSoundDeviceInfo() ([]SoundDevice, error) {
info := make([]SoundDevice, 0)
err := wmi.Query("SELECT * FROM Win32_SoundDevice", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetNetworkAdapterInfo 网卡
func GetNetworkAdapterInfo() ([]NetworkAdapter, error) {
info := make([]NetworkAdapter, 0)
err := wmi.Query("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetDesktopMonitorInfo 显示器
func GetDesktopMonitorInfo() ([]DesktopMonitor, error) {
info := make([]DesktopMonitor, 0)
err := wmi.Query("SELECT * FROM Win32_DesktopMonitor", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetPointingDeviceInfo 鼠标
func GetPointingDeviceInfo() ([]PointingDevice, error) {
info := make([]PointingDevice, 0)
err := wmi.Query("SELECT * FROM Win32_PointingDevice", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetKeyboardInfo 键盘
func GetKeyboardInfo() ([]Keyboard, error) {
info := make([]Keyboard, 0)
err := wmi.Query("SELECT * FROM Win32_Keyboard", &info)
if err != nil {
return nil, err
}
return info, nil
}
// GetHardwareInfo 通过 WMI 采集整机硬件信息
func GetHardwareInfo() (Hardware, error) {
hardware := Hardware{}
hardware.BaseBoard, _ = GetBaseBoardInfo()
hardware.Bios, _ = GetBiosInfo()
hardware.VideoController, _ = GetVideoControllerInfo()
hardware.PhysicalMemory, _ = GetPhysicalMemoryInfo()
hardware.Processor, _ = GetProcessorInfo()
hardware.DiskDrive, _ = GetDiskDriveInfo()
hardware.SoundDevice, _ = GetSoundDeviceInfo()
hardware.NetworkAdapter, _ = GetNetworkAdapterInfo()
hardware.DesktopMonitor, _ = GetDesktopMonitorInfo()
hardware.PointingDevice, _ = GetPointingDeviceInfo()
hardware.Keyboard, _ = GetKeyboardInfo()
return hardware, nil
}