winform C#取硬件标志 获得机器名,CPU编号,硬盘编号

需要事先添加引用System.Management;    

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值