C# 取唯一得机器码 问题严重! 我刚做了取机器码做注册 (取硬盘id号)但是我用此硬盘作为母盘 其他的硬盘就不需注册了,(是取硬盘号一样的意思!)怎么才能取出计算机的唯一标识呢?急的很……所以在线等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.sina.com.cn/s/blog_4c837c4d0100g5iy.html利用计算机CPU号绑定MAC地址作为唯一。 可以试试用计算机名称CPU编号! 去cpu号using System; using System.Runtime.InteropServices; using System.Management; namespace Hard{ /// <summary> /// Hardware_Mac 的摘要说明。 /// </summary> internal class clsHardInfo { //取CPU编号 internal 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 internal string GetDiskID() { try { //获取硬盘ID String HDid = ""; ManagementClass mc = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { HDid = (string)mo.Properties["Model"].Value; } moc = null; mc = null; return HDid; } catch { return ""; } finally { } } //取第一块硬盘编号 internal 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(Exception ex) { return ""; } }//end internal 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)] internal struct ADAPTER_STATUS { [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] internal byte[] adapter_address; internal byte rev_major; internal byte reserved0; internal byte adapter_type; internal byte rev_minor; internal ushort duration; internal ushort frmr_recv; internal ushort frmr_xmit; internal ushort iframe_recv_err; internal ushort xmit_aborts; internal uint xmit_success; internal uint recv_success; internal ushort iframe_xmit_err; internal ushort recv_buff_unavail; internal ushort t1_timeouts; internal ushort ti_timeouts; internal uint reserved1; internal ushort free_ncbs; internal ushort max_cfg_ncbs; internal ushort max_ncbs; internal ushort xmit_buf_unavail; internal ushort max_dgram_size; internal ushort pending_sess; internal ushort max_cfg_sess; internal ushort max_sess; internal ushort max_sess_pkt_size; internal ushort name_count; } [StructLayout(LayoutKind.Sequential)] internal struct NAME_BUFFER { [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] internal byte[] name; internal byte name_num; internal byte name_flags; } [StructLayout(LayoutKind.Sequential)] internal struct NCB { internal byte ncb_command; internal byte ncb_retcode; internal byte ncb_lsn; internal byte ncb_num; internal IntPtr ncb_buffer; internal ushort ncb_length; [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] internal byte[] ncb_callname; [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] internal byte[] ncb_name; internal byte ncb_rto; internal byte ncb_sto; internal IntPtr ncb_post; internal byte ncb_lana_num; internal byte ncb_cmd_cplt; [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)] internal byte[] ncb_reserve; internal IntPtr ncb_event; } [StructLayout(LayoutKind.Sequential)] internal struct LANA_ENUM { internal byte length; [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)] internal byte[] lana; } [StructLayout(LayoutKind.Auto)] internal struct ASTAT { internal ADAPTER_STATUS adapt; [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)] internal NAME_BUFFER[] NameBuff; } internal class Win32API { [DllImport("NETAPI32.DLL")] internal static extern char Netbios(ref NCB ncb); } internal 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'); } } } 上面除了取cpu号,硬盘号外,还可以取网卡mac地址 硬盘序列号CPU序列号http://topic.csdn.net/u/20100830/15/231b8123-9167-4f69-980b-a5d82342f77d.html 回楼上的 我使用过上面的方法 !取出来的cpu和硬盘id 是一样的(我这的硬盘和主板是同一个厂家送的 一次送很多 所以id号和cpu都不行)有没有其他的计算机唯一标识啊? 还有 网卡的mac地址是可变得 ! 山寨厂家?因特尔cpu怎么可能id都一样? 是取的cpu的编号,同一批出厂的产品cpu的编号是一样的,cpu全球唯一的序列好不知道怎么取 哦,对了,上面是取cpu编号,同一批是一样的你取第一块硬盘号行吗? 看你到底要达到什么目的了。mac/cpu编号好像对无法区分一台机器上的多个virtual machines. 最后我用这个方法取的硬盘号:大家参考一下下 反正现在取的不一样了! public string GetDiskSerialNumber() { ManagementObjectSearcher mos = new ManagementObjectSearcher(); mos.Query = new SelectQuery("Win32_DiskDrive", "", new string[] { "PNPDeviceID", "Signature" }); ManagementObjectCollection myCollection = mos.Get(); ManagementObjectCollection.ManagementObjectEnumerator em = myCollection.GetEnumerator(); em.MoveNext(); ManagementBaseObject moo = em.Current; string id = moo.Properties["signature"].Value.ToString().Trim(); return id; } 晕,楼主已经解决了啊我也刚找到获取cpu唯一序列号的代码 那快给我发一份吧!!!谢谢了!!!现在又急着用呢!十分感谢了![email protected]回复也行啊 谢谢哦 为什么尽量少用静态类? DateTime 转化成Byte数组 ,相反byte数组转化成Datetime? 求一sql语句 多表联合取实际值。 来看一个关于编译的问题啊!! C#如何读出word页面背景中使用了那种水印样式 关于对控件名称的操作问题 有关reflection调用dll方法的问题 问个打包问题 请教:关于向FreeTextBox编辑区复制内容的问题 高分求救C# 实现 摄像头拍摄,类似Amcap linq to sql中的一个复杂查询的问题?? 请教winform中加载图片的问题!!
利用计算机CPU号绑定MAC地址作为唯一。
using System;
using System.Runtime.InteropServices;
using System.Management; namespace Hard
{
/// <summary>
/// Hardware_Mac 的摘要说明。
/// </summary>
internal class clsHardInfo
{
//取CPU编号
internal 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 internal string GetDiskID()
{
try
{
//获取硬盘ID
String HDid = "";
ManagementClass mc = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
HDid = (string)mo.Properties["Model"].Value;
}
moc = null;
mc = null;
return HDid;
}
catch
{
return "";
}
finally
{
} }
//取第一块硬盘编号
internal 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(Exception ex)
{
return "";
}
}//end internal 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)]
internal struct ADAPTER_STATUS
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]
internal byte[] adapter_address;
internal byte rev_major;
internal byte reserved0;
internal byte adapter_type;
internal byte rev_minor;
internal ushort duration;
internal ushort frmr_recv;
internal ushort frmr_xmit;
internal ushort iframe_recv_err;
internal ushort xmit_aborts;
internal uint xmit_success;
internal uint recv_success;
internal ushort iframe_xmit_err;
internal ushort recv_buff_unavail;
internal ushort t1_timeouts;
internal ushort ti_timeouts;
internal uint reserved1;
internal ushort free_ncbs;
internal ushort max_cfg_ncbs;
internal ushort max_ncbs;
internal ushort xmit_buf_unavail;
internal ushort max_dgram_size;
internal ushort pending_sess;
internal ushort max_cfg_sess;
internal ushort max_sess;
internal ushort max_sess_pkt_size;
internal ushort name_count;
} [StructLayout(LayoutKind.Sequential)]
internal struct NAME_BUFFER
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
internal byte[] name;
internal byte name_num;
internal byte name_flags;
} [StructLayout(LayoutKind.Sequential)]
internal struct NCB
{
internal byte ncb_command;
internal byte ncb_retcode;
internal byte ncb_lsn;
internal byte ncb_num;
internal IntPtr ncb_buffer;
internal ushort ncb_length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
internal byte[] ncb_callname;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]
internal byte[] ncb_name;
internal byte ncb_rto;
internal byte ncb_sto;
internal IntPtr ncb_post;
internal byte ncb_lana_num;
internal byte ncb_cmd_cplt;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]
internal byte[] ncb_reserve;
internal IntPtr ncb_event;
} [StructLayout(LayoutKind.Sequential)]
internal struct LANA_ENUM
{
internal byte length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]
internal byte[] lana;
} [StructLayout(LayoutKind.Auto)]
internal struct ASTAT
{
internal ADAPTER_STATUS adapt;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)]
internal NAME_BUFFER[] NameBuff;
}
internal class Win32API
{
[DllImport("NETAPI32.DLL")]
internal static extern char Netbios(ref NCB ncb);
} internal 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');
} }
}
CPU序列号
http://topic.csdn.net/u/20100830/15/231b8123-9167-4f69-980b-a5d82342f77d.html
取出来的cpu和硬盘id 是一样的(我这的硬盘和主板是同一个厂家送的 一次送很多 所以id号和cpu都不行)
有没有其他的计算机唯一标识啊?
因特尔cpu怎么可能id都一样?
是取的cpu的编号,同一批出厂的产品cpu的编号是一样的,cpu全球唯一的序列好不知道怎么取
你取第一块硬盘号行吗?
{
ManagementObjectSearcher mos = new ManagementObjectSearcher();
mos.Query = new SelectQuery("Win32_DiskDrive", "", new string[] { "PNPDeviceID", "Signature" });
ManagementObjectCollection myCollection = mos.Get();
ManagementObjectCollection.ManagementObjectEnumerator em = myCollection.GetEnumerator();
em.MoveNext();
ManagementBaseObject moo = em.Current;
string id = moo.Properties["signature"].Value.ToString().Trim();
return id;
}
我也刚找到获取cpu唯一序列号的代码
那快给我发一份吧!!!
谢谢了!!!现在又急着用呢!十分感谢了![email protected]
回复也行啊 谢谢哦