您的位置:首页 > 编程语言 > C#

C#获取CPU和硬盘序列号的源码

2011-09-02 15:00 253 查看
C#获取CPU和硬盘序列号的源码

首先需添加对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');

}

}

}

使用方法举例: 更多.net源代码 来自乐博网lob.cn

//获取硬盘序列号

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: