(轉)Net中获取CPU编号

].Net中获取CPU编号
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'); 
  }
 

 }

}

原文地址:https://www.cnblogs.com/Tonyyang/p/725734.html