c#获取硬件信息

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 ' );
        }

    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值