手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#如何取硬件标志
C#如何取硬件标志
摘要:usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Management...

usingSystem;

usingSystem.Runtime.InteropServices;

usingSystem.Management;

namespaceHardware

{

///<summary>

///Hardware_Mac的摘要说明。

///</summary>

publicclassHardwareInfo

{

//取机器名

publicstringGetHostName()

{

returnSystem.Net.Dns.GetHostName();

}

//取CPU编号

publicStringGetCpuID()

{

try

{

ManagementClassmc=newManagementClass("Win32_Processor");

ManagementObjectCollectionmoc=mc.GetInstances();

StringstrCpuID=null;

foreach(ManagementObjectmoinmoc)

{

strCpuID=mo.Properties["ProcessorId"].Value.ToString();

break;

}

returnstrCpuID;

}

catch

{

return"";

}

}//endmethod

//取第一块硬盘编号

publicStringGetHardDiskID()

{

try

{

ManagementObjectSearchersearcher=newManagementObjectSearcher("Select*FROMWin32_PhysicalMedia");

StringstrHardDiskID=null;

foreach(ManagementObjectmoinsearcher.Get())

{

strHardDiskID=mo["SerialNumber"].ToString().Trim();

break;

}

returnstrHardDiskID;

}

catch

{

return"";

}

}//end

publicenumNCBCONST

{

NCBNAMSZ=16,/*absolutelengthofanetname*/

MAX_LANA=254,/*lana'sinrange0toMAX_LANAinclusive*/

NCBENUM=0x37,/*NCBENUMERATELANANUMBERS*/

NRC_GOODRET=0x00,/*goodreturn*/

NCBRESET=0x32,/*NCBRESET*/

NCBASTAT=0x33,/*NCBADAPTERSTATUS*/

NUM_NAMEBUF=30,/*NumberofNAME'sBUFFER*/

}

[StructLayout(LayoutKind.Sequential)]

publicstructADAPTER_STATUS

{

[MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]

publicbyte[]adapter_address;

publicbyterev_major;

publicbytereserved0;

publicbyteadapter_type;

publicbyterev_minor;

publicushortduration;

publicushortfrmr_recv;

publicushortfrmr_xmit;

publicushortiframe_recv_err;

publicushortxmit_aborts;

publicuintxmit_success;

publicuintrecv_success;

publicushortiframe_xmit_err;

publicushortrecv_buff_unavail;

publicushortt1_timeouts;

publicushortti_timeouts;

publicuintreserved1;

publicushortfree_ncbs;

publicushortmax_cfg_ncbs;

publicushortmax_ncbs;

publicushortxmit_buf_unavail;

publicushortmax_dgram_size;

publicushortpending_sess;

publicushortmax_cfg_sess;

publicushortmax_sess;

publicushortmax_sess_pkt_size;

publicushortname_count;

}

[StructLayout(LayoutKind.Sequential)]

publicstructNAME_BUFFER

{

[MarshalAs(UnmanagedType.ByValArray,SizeConst=(int)NCBCONST.NCBNAMSZ)]

publicbyte[]name;

publicbytename_num;

publicbytename_flags;

}

[StructLayout(LayoutKind.Sequential)]

publicstructNCB

{

publicbytencb_command;

publicbytencb_retcode;

publicbytencb_lsn;

publicbytencb_num;

publicIntPtrncb_buffer;

publicushortncb_length;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=(int)NCBCONST.NCBNAMSZ)]

publicbyte[]ncb_callname;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=(int)NCBCONST.NCBNAMSZ)]

publicbyte[]ncb_name;

publicbytencb_rto;

publicbytencb_sto;

publicIntPtrncb_post;

publicbytencb_lana_num;

publicbytencb_cmd_cplt;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]

publicbyte[]ncb_reserve;

publicIntPtrncb_event;

}

[StructLayout(LayoutKind.Sequential)]

publicstructLANA_ENUM

{

publicbytelength;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=(int)NCBCONST.MAX_LANA)]

publicbyte[]lana;

}

[StructLayout(LayoutKind.Auto)]

publicstructASTAT

{

publicADAPTER_STATUSadapt;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=(int)NCBCONST.NUM_NAMEBUF)]

publicNAME_BUFFER[]NameBuff;

}

publicclassWin32API

{

[DllImport("NETAPI32.DLL")]

publicstaticexterncharNetbios(refNCBncb);

}

publicstringGetMacAddress()

{

stringaddr="";

try

{

intcb;

ASTATadapter;

NCBNcb=newNCB();

charuRetCode;

LANA_ENUMlenum;

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(refNcb);

lenum=(LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer,typeof(LANA_ENUM));

Marshal.FreeHGlobal(Ncb.ncb_buffer);

if(uRetCode!=(short)NCBCONST.NRC_GOODRET)

return"";

for(inti=0;i<lenum.length;i++)

{

Ncb.ncb_command=(byte)NCBCONST.NCBRESET;

Ncb.ncb_lana_num=lenum.lana[i];

uRetCode=Win32API.Netbios(refNcb);

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(refNcb);

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

{}

returnaddr.Replace('','0');

}

}

}

【C#如何取硬件标志】相关文章:

C#的四个基本技巧

C# 获取程序集版本、文件版本

C#获取全部目录和文件的简单实例

C# 分支与循环介绍

C#中常使用进度条的代码

C# 中文简体转繁体实现代码

c# 以二进制读取文本文件

C#几种截取字符串的方法小结

C# char类型字符转换大小写的实现代码

如何利用反射构建元数据查看器

精品推荐
分类导航