using System;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
using System.Runtime.InteropServices;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
using System.Management;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
namespace Hardware‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
/// <summary>‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
/// Hardware_Mac 的摘要说明。‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
/// </summary>‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public class HardwareInfo‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
//取机器名 ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public string GetHostName()‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return System.Net.Dns.GetHostName(); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
//取CPU编号‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public String GetCpuID() ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
try‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
ManagementClass mc = new ManagementClass("Win32_Processor");‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
ManagementObjectCollection moc = mc.GetInstances();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
String strCpuID = null ;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
foreach( ManagementObject mo in moc ) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
strCpuID = mo.Properties["ProcessorId"].Value.ToString();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
break; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return strCpuID;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
catch‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return "";‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}//end method‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
//取第一块硬盘编号‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public String GetHardDiskID() ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
try‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
String strHardDiskID = null ;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
foreach(ManagementObject mo in searcher.Get()) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
strHardDiskID = mo["SerialNumber"].ToString().Trim();‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
break; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return strHardDiskID ;‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
catch‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return "";‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}//end ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public enum NCBCONST ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NCBNAMSZ =16, /* absolute length of a net name */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
MAX_LANA =254, /* lana's in range 0 to MAX_LANA inclusive */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NCBENUM =0x37, /* NCB ENUMERATE LANA NUMBERS */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NRC_GOODRET =0x00, /* good return */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NCBRESET =0x32, /* NCB RESET */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NCBASTAT =0x33, /* NCB ADAPTER STATUS */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NUM_NAMEBUF =30, /* Number of NAME's BUFFER */ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[StructLayout(LayoutKind.Sequential)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public struct ADAPTER_STATUS ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] adapter_address; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte rev_major; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte reserved0; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte adapter_type; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte rev_minor; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort duration; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort frmr_recv; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort frmr_xmit; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort iframe_recv_err; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort xmit_aborts; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public uint xmit_success; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public uint recv_success; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort iframe_xmit_err; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort recv_buff_unavail; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort t1_timeouts; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort ti_timeouts; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public uint reserved1; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort free_ncbs; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_cfg_ncbs; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_ncbs; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort xmit_buf_unavail; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_dgram_size; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort pending_sess; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_cfg_sess; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_sess; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort max_sess_pkt_size; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort name_count; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[StructLayout(LayoutKind.Sequential)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public struct NAME_BUFFER ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] name; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte name_num; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte name_flags; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[StructLayout(LayoutKind.Sequential)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public struct NCB ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_command; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_retcode; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_lsn; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_num; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public IntPtr ncb_buffer; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ushort ncb_length; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] ncb_callname; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] ncb_name; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_rto; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_sto; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public IntPtr ncb_post; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_lana_num; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte ncb_cmd_cplt; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=10)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] ncb_reserve; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public IntPtr ncb_event; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[StructLayout(LayoutKind.Sequential)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public struct LANA_ENUM ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte length; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public byte[] lana; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[StructLayout(LayoutKind.Auto)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public struct ASTAT ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public ADAPTER_STATUS adapt; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public NAME_BUFFER[] NameBuff; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public class Win32API ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
[DllImport("NETAPI32.DLL")] ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public static extern char Netbios(ref NCB ncb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
public string GetMacAddress() ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
string addr=""; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
try‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
int cb; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
ASTAT adapter; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
NCB Ncb=new NCB(); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
char uRetCode; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
LANA_ENUM lenum; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_command = (byte)NCBCONST.NCBENUM; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
cb = Marshal.SizeOf(typeof(LANA_ENUM)); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_length = (ushort)cb; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
uRetCode = Win32API.Netbios(ref Ncb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM)); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Marshal.FreeHGlobal(Ncb.ncb_buffer); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
if(uRetCode != (short)NCBCONST.NRC_GOODRET) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return ""; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
for(int i=0; i < lenum.length ;i++) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_command = (byte)NCBCONST.NCBRESET; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_lana_num = lenum.lana; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
uRetCode = Win32API.Netbios(ref Ncb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
if(uRetCode != (short)NCBCONST.NRC_GOODRET) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return ""; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_command = (byte)NCBCONST.NCBASTAT; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_lana_num = lenum.lana; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_callname[0]=(byte)'*'; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_buffer = Marshal.AllocHGlobal(cb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Ncb.ncb_length = (ushort)cb; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
uRetCode = Win32API.Netbios(ref Ncb); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS)); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
Marshal.FreeHGlobal(Ncb.ncb_buffer); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
if (uRetCode == (short)NCBCONST.NRC_GOODRET) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{ ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
if(i>0) ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
addr += ":"; ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
addr = string.Format("{0,2}{1,2}{2,2}{3,2}{4,2}{5,2:X}", ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[0], ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[1], ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[2], ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[3], ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[4], ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
adapter.adapt.adapter_address[5]); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
catch‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
{}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
return addr.Replace(' ', '0'); ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
} ‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}‡vډ »Äùøwww.netcsharp.cn:<åƒažõ
}
‡vډ »Äùøwww.netcsharp.cn:<åƒažõ