在開發系統診斷、硬體監控或資產管理工具時,取得電腦的硬體資訊是非常常見的需求。本文將教你如何使用 C# 結合 WMI(Windows Management Instrumentation)取得各種 PC 硬體資訊,從 CPU、記憶體到顯示卡、主機板通通都有。
🔧 前置準備
在 C# 中,查詢硬體資訊可以透過System.Management
命名空間。請確認你的專案有引用此命名空間:csharp
複製編輯using System.Management;
💡 如果是使用 .NET Core 或 .NET 5/6/7,請透過 NuGet 安裝套件:
mathematica
複製編輯
Install-Package System.Management
🧩 常見硬體資訊查詢對應 WMI 類別
硬體WMI 類別處理器 (CPU)Win32_Processor記憶體 (RAM)Win32_PhysicalMemory顯示卡 (GPU)Win32_VideoController硬碟Win32_DiskDrive主機板Win32_BaseBoardBIOSWin32_BIOS作業系統Win32_OperatingSystem網路卡Win32_NetworkAdapter、Win32_NetworkAdapterConfigurationUSB 裝置Win32_USBController鍵盤 / 滑鼠Win32_Keyboard、Win32_PointingDevice
🧪 範例:完整查詢所有硬體資訊
以下是可查詢上述所有 WMI 類別的範例程式碼,並將每個屬性列印到 Console。
csharp
複製編輯using System;
using System.Management;
class Program
{
static void Main()
{
string[] hardwareClasses = new string[]
{
"Win32_Processor",
"Win32_PhysicalMemory",
"Win32_Keyboard",
"Win32_PointingDevice",
"Win32_VideoController",
"Win32_SoundDevice",
"Win32_DiskDrive",
"Win32_CDROMDrive",
"Win32_BaseBoard",
"Win32_BIOS",
"Win32_NetworkAdapter",
"Win32_NetworkAdapterConfiguration",
"Win32_OperatingSystem",
"Win32_ComputerSystem",
"Win32_SystemEnclosure",
"Win32_PnPEntity",
"Win32_USBController",
"Win32_Battery"
};
foreach (string wmiClass in hardwareClasses)
{
Console.WriteLine($"========== {wmiClass} ==========");
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT * FROM {wmiClass}");
foreach (ManagementObject obj in searcher.Get())
{
foreach (PropertyData prop in obj.Properties)
{
Console.WriteLine($"{prop.Name}: {prop.Value}");
}
Console.WriteLine(); // 分隔每筆資料
}
}
catch (Exception ex)
{
Console.WriteLine($"無法查詢 {wmiClass}: {ex.Message}");
}
Console.WriteLine();
}
Console.WriteLine("✅ 所有硬體資訊查詢完成!");
}
}
📝 補充說明
- 有些資訊可能會重複或格式較難閱讀:你可以針對每個類別做自訂格式處理,例如把容量單位轉換成 GB、日期轉換格式等。
- 某些類別可能沒有資料或查詢失敗,建議包在 try/catch 裡避免程式崩潰。
- 若要輸出成檔案,可以改用
StreamWriter
將資料寫入.txt
、.json
、.csv
等格式。
🎯 結語
使用 C# 結合 WMI 是一種簡單又強大的方式來取得電腦硬體資訊。你可以根據這份程式碼進一步延伸,例如建立 GUI 工具、匯出報告,甚至與伺服器連線回報設備狀態。