首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 取得電腦硬體資訊:CPU、硬碟、網卡 MAC/IP、主機名稱

     編輯:關於C語言

HardInfoClass:硬體識別碼擷取工具類別

透過 WMI (System.Management) 與 Win32 API (kernel32.dll) 取得電腦唯一識別資訊,常用於軟體授權綁定、資產管理。

使用範例

HardInfoClass info = new HardInfoClass();
txtCpuId.Text = info.GetCpuID();
txtDiskId.Text = info.GetHardDiskID();
txtMac.Text = info.GetNetCardMac();
txtIp.Text = info.GetNetCardIP();
txtHostName.Text = info.GetHostName();
txtVolD.Text = info.GetVolOf("D"); // 磁碟機序號

核心方法實作

using System;
using System.Management;
using System.Net;
using System.Runtime.InteropServices;

public class HardInfoClass
{
    // 取得 CPU ID
    public string GetCpuID()
    {
        try
        {
            using (ManagementClass mc = new ManagementClass("Win32_Processor"))
            using (ManagementObjectCollection moc = mc.GetInstances())
            {
                foreach (ManagementObject mo in moc)
                    return mo.Properties["ProcessorId"].Value?.ToString() ?? "";
            }
        }
        catch { return ""; }
        return "";
    }

    // 取得第一顆實體硬碟序號
    public string GetHardDiskID()
    {
        try
        {
            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"))
            {
                foreach (ManagementObject mo in searcher.Get())
                    return mo["SerialNumber"]?.ToString().Trim() ?? "";
            }
        }
        catch { return ""; }
        return "";
    }

    // 取得啟用網卡的 MAC 位址
    public string GetNetCardMac()
    {
        try
        {
            using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
            using (ManagementObjectCollection moc = mc.GetInstances())
            {
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"])
                        return mo["MacAddress"]?.ToString() ?? "";
                }
            }
        }
        catch { return ""; }
        return "";
    }

    // 取得啟用網卡的第一個 IPv4 位址
    public string GetNetCardIP()
    {
        try
        {
            using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
            using (ManagementObjectCollection moc = mc.GetInstances())
            {
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"])
                    {
                        string[] ips = (string[])mo["IPAddress"];
                        if (ips.Length > 0) return ips[0];
                    }
                }
            }
        }
        catch { return ""; }
        return "";
    }

    // 取得主機名稱
    public string GetHostName() => Dns.GetHostName();

    // 取得磁碟機序號 (Win32 API)
    [DllImport("kernel32.dll")]
    private static extern int GetVolumeInformation(
        string lpRootPathName, string lpVolumeNameBuffer, int nVolumeNameSize,
        ref int lpVolumeSerialNumber, int lpMaximumComponentLength,
        int lpFileSystemFlags, string lpFileSystemNameBuffer, int nFileSystemNameSize);

    public string GetVolOf(string driveLetter)
    {
        try
        {
            int serial = 0;
            GetVolumeInformation(driveLetter + @":\", null, 0, ref serial, 0, 0, null, 0);
            return serial.ToString("X"); // 16 進位顯示
        }
        catch { return ""; }
    }
}

注意事項

  • 需參考 System.Management.dll。
  • WMI 查詢需管理員權限才能取得完整資訊。
  • 虛擬機器環境下硬體 ID 可能重複或為空。
  • 建議快取結果,避免重複查詢影響效能。

應用場景: 軟體授權綁定、硬體資產掃描、裝置指紋辨識。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved