使用C#获取CPU及硬盘序列号的源代码

首先需添加对System.Management的引用。

view plaincopy to clipboardprint?
using System;    
using System.Runtime.InteropServices;    
using System.Management;    
  
namespace Hardware    
{    
    /// <summary>    
    /// HardwareInfo 的摘要说明。    
    /// </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');    
        }    
    }    
}   
using System; 
using System.Runtime.InteropServices; 
using System.Management;

namespace Hardware 

    /// <summary> 
    /// HardwareInfo 的摘要说明。 
    /// </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'); 
        } 
    } 

 

使用方法举例:

view plaincopy to clipboardprint?
//获取硬盘序列号    
Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();    
string hardDiskID = hardwareInfo.GetHardDiskID();    
System.Console.WriteLine(hardDiskID);    
  
//获取CPU序列号    
string cpuID = hardwareInfo.GetCpuID();    
System.Console.WriteLine(cpuID);    
//获取硬盘序列号Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();string hardDiskID = hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//获取CPU序列号string cpuID = hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID); 


本文转载自CSDN博客,http://blog.csdn.net/songkexin/archive/2009/12/01/4916602.aspx


作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2009/12/11/1622256.html

上一篇:Ubuntu下管理wifi的两个图形化工具(无需管理员权限)


下一篇:Office2003打开或关闭word Excel文档出现发送错误报告