用C#如何读取硬件信息,获得各个硬件的基本信息。如显卡的品牌、硬盘品牌等。

解决方案 »

  1.   

    WMI 获取硬件信息
    ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
    http://www.codeproject.com/KB/system/wmi.aspx
      

  2.   

    网上找的,希望对你有用
    using System;
    using System.Runtime.InteropServices;
    using System.Management;
    namespace Hardware
    {
    /// <summary>
    /// Hardware_Mac 的摘要说明。
    /// </summary>
    public class HardwareInfo
    {
    //取机器名 
    public string GetHostName()
    {
    return System.Net.Dns.GetHostName();
    }
    //取CPU编号
    public String GetCpuID()
    {
    try
    {
    ManagementClass mc = new ManagementClass("Win32_Processor");
    ManagementObjectCollection moc = mc.GetInstances();String strCpuID = null;
    foreach (ManagementObject mo in moc)
    {
    strCpuID = mo.Properties["ProcessorId"].Value.ToString();
    break;
    }
    return strCpuID;
    }
    catch
    {
    return "";
    }
    }//end method//取第一块硬盘编号
    public String GetHardDiskID()
    {
    try
    {
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
    String strHardDiskID = null;
    foreach (ManagementObject mo in searcher.Get())
    {
    strHardDiskID = mo["SerialNumber"].ToString().Trim();
    break;
    }
    return strHardDiskID;
    }
    catch
    {
    return "";
    }
    }//end 
    public enum NCBCONST
    {
    NCBNAMSZ = 16, /* absolute length of a net name */
    MAX_LANA = 254, /* lana's in range 0 to MAX_LANA inclusive */
    NCBENUM = 0x37, /* NCB ENUMERATE LANA NUMBERS */
    NRC_GOODRET = 0x00, /* good return */
    NCBRESET = 0x32, /* NCB RESET */
    NCBASTAT = 0x33, /* NCB ADAPTER STATUS */
    NUM_NAMEBUF = 30, /* Number of NAME's BUFFER */
    }[StructLayout(LayoutKind.Sequential)]
    public struct ADAPTER_STATUS
    {
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public byte[] adapter_address;
    public byte rev_major;
    public byte reserved0;
    public byte adapter_type;
    public byte rev_minor;
    public ushort duration;
    public ushort frmr_recv;
    public ushort frmr_xmit;
    public ushort iframe_recv_err;
    public ushort xmit_aborts;
    public uint xmit_success;
    public uint recv_success;
    public ushort iframe_xmit_err;
    public ushort recv_buff_unavail;
    public ushort t1_timeouts;
    public ushort ti_timeouts;
    public uint reserved1;
    public ushort free_ncbs;
    public ushort max_cfg_ncbs;
    public ushort max_ncbs;
    public ushort xmit_buf_unavail;
    public ushort max_dgram_size;
    public ushort pending_sess;
    public ushort max_cfg_sess;
    public ushort max_sess;
    public ushort max_sess_pkt_size;
    public ushort name_count;
    }[StructLayout(LayoutKind.Sequential)]
    public struct NAME_BUFFER
    {
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
    public byte[] name;
    public byte name_num;
    public byte name_flags;
    }[StructLayout(LayoutKind.Sequential)]
    public struct NCB
    {
    public byte ncb_command;
    public byte ncb_retcode;
    public byte ncb_lsn;
    public byte ncb_num;
    public IntPtr ncb_buffer;
    public ushort ncb_length;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
    public byte[] ncb_callname;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
    public byte[] ncb_name;
    public byte ncb_rto;
    public byte ncb_sto;
    public IntPtr ncb_post;
    public byte ncb_lana_num;
    public byte ncb_cmd_cplt;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
    public byte[] ncb_reserve;
    public IntPtr ncb_event;
    }[StructLayout(LayoutKind.Sequential)]
    public struct LANA_ENUM
    {
    public byte length;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]
    public byte[] lana;
    }[StructLayout(LayoutKind.Auto)]
    public struct ASTAT
    {
    public ADAPTER_STATUS adapt;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]
    public NAME_BUFFER[] NameBuff;
    }
    public class Win32API
    {
    [DllImport("NETAPI32.DLL")]
    public static extern char Netbios(ref NCB ncb);
    }
    public string GetMacAddress()
    {
    string addr = "";
    try
    {
    int cb;
    ASTAT adapter;
    NCB Ncb = new NCB();
    char uRetCode;
    LANA_ENUM lenum;Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
    cb = Marshal.SizeOf(typeof(LANA_ENUM));
    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
    Ncb.ncb_length = (ushort)cb;
    uRetCode = Win32API.Netbios(ref Ncb);
    lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
    Marshal.FreeHGlobal(Ncb.ncb_buffer);
    if (uRetCode != (short)NCBCONST.NRC_GOODRET)
    return "";for (int i = 0; i < lenum.length; i++)
    {
    Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
    Ncb.ncb_lana_num = lenum.lana[i];
    uRetCode = Win32API.Netbios(ref Ncb);
    if (uRetCode != (short)NCBCONST.NRC_GOODRET)
    return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
    Ncb.ncb_lana_num = lenum.lana[i];
    Ncb.ncb_callname[0] = (byte)'*';
    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
    Ncb.ncb_length = (ushort)cb;
    uRetCode = Win32API.Netbios(ref Ncb);
    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
    Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode == (short)NCBCONST.NRC_GOODRET)
    {
    if (i > 0)
    addr += ":";
    addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
    adapter.adapt.adapter_address[0],
    adapter.adapt.adapter_address[1],
    adapter.adapt.adapter_address[2],
    adapter.adapt.adapter_address[3],
    adapter.adapt.adapter_address[4],
    adapter.adapt.adapter_address[5]);
    }
    }
    }
    catch
    { }
    return addr.Replace(' ', '0');
    }}
    }
      

  3.   

     up up  up  jf
      

  4.   

    参考8楼的就可以了。我下面的代码可以获取显卡信息。 ManagementClass mc = new ManagementClass("Win32_VideoController");            ManagementObjectCollection moc = mc.GetInstances();            StringBuilder content = new StringBuilder("Video controller infomation:\r\n");
                content.Append("----------\r\n");            content.Append(moc.Count.ToString() + " Video controller in your PC\r\n\r\n");            int index = 0;            foreach (ManagementObject mo in moc)
                {
                    content.Append("Video controller " + index.ToString() + " :\r\n");                foreach (PropertyData data in mo.Properties)
                    {
                        content.Append("\t" + data.Name + "\t:\t" + ((data.Value != null) ? (data.Value.ToString() + "\r\n") : "") + "\r\n");
                    }
                }
      

  5.   

      RegistryKey Rkey = Registry.LocalMachine;
                richTextBox1.Text = "";
                Rkey = Rkey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
                richTextBox1.Text += "处理器信息:\r\n" + Rkey.GetValue("ProcessorNameString").ToString().Replace("  ", "");
                richTextBox1.Text += "\r\n计算机名:\r\n" + System.Windows.Forms.SystemInformation.ComputerName.ToString();
                richTextBox1.Text += "\r\n用户系统中磁盘分区:\r\n";
                for (int i = 0; i < Environment.GetLogicalDrives().Length; i++)
                {
                    richTextBox1.Text += Environment.GetLogicalDrives()[i] + " ";
                }
                Rkey = Registry.LocalMachine;
                //GetOsVersion()//取得操作系统版本 
                //GetMemInfo();//取得内存信息 
                //GetDriverInfo();//取得驱动器信息 
                //GetCpuInfo();//
                MEMORYSTATUS1 vBuffer = new MEMORYSTATUS1();//实例化结构
                GlobalMemoryStatus(ref   vBuffer);//给此结构赋值
                string useinfo = Convert.ToString(vBuffer.dwAvailPhys);//获得已用内存量
                string allinfo = Convert.ToString(vBuffer.dwTotalPhys);//获得内存总量
                //MessageBox.Show(useinfo + ":" + allinfo);
                int infoAll, infoUsed;
                infoAll = int.Parse(allinfo) / 1024/1024;
                infoUsed = int.Parse(useinfo) / 1024/1024;
                richTextBox1.Text += "\r\n已用内存容量:"+infoUsed.ToString() +"MB\r\n"+"系统内存总量:"+ infoAll.ToString()+"MB";这一段
      

  6.   

    WMI
    这东西很好玩的ManagementClass driveClass = new ManagementClass("SELECT * FROM Win32_Printer");不过就是太慢了
      

  7.   

    WMI API还有.net架构提供的对象等等。