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

ExpandedBlockStart.gif 代码
首先需添加对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

转载于:https://www.cnblogs.com/TTTT/archive/2009/12/11/1622261.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值