當前位置:編程學習大全網 - 源碼下載 - c#怎樣獲取u盤序列號

c#怎樣獲取u盤序列號

首先需添加對System.Management的引用。

using?System;

using?System.Runtime.InteropServices;

using?System.Management;

namespace?Hardware

{

///?<summary>

///?HardwareInfo?的摘要說明。

///?</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');

}

}

}

使用方法舉例:

//獲取硬盤序列號

Hardware.HardwareInfo?hardwareInfo?=?new?Hardware.HardwareInfo();

string?hardDiskID?=?hardwareInfo.GetHardDiskID();

System.Console.WriteLine(hardDiskID);

//獲取CPU序列號

string?cpuID?=?hardwareInfo.GetCpuID();

System.Console.WriteLine(cpuID);

//獲取硬盤序列號Hardware.HardwareInfo?hardwareInfo?=?new?Hardware.HardwareInfo();string?hardDiskID?=?hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//獲取CPU序列號string?cpuID?=?hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID);

轉自:CSDN《使用C#獲取CPU及硬盤序列號的源代碼》 --?songkexin

  • 上一篇:vb中,十六進制運算出現錯誤,求解決辦法。
  • 下一篇:startService啟動流程
  • copyright 2024編程學習大全網