使用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

posted @ 2009-12-11 23:32  TiTi  阅读(481)  评论(0编辑  收藏  举报