请教获取cpu序列号的正解
我用ManagementClass获得的id是AFE9FBFF000006D8和我另外一台机器上的号码一样,郁闷!如果你的解答类似下面代码请不要回复,不胜感激!ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
我用ManagementClass获得的id是AFE9FBFF000006D8和我另外一台机器上的号码一样,郁闷!如果你的解答类似下面代码请不要回复,不胜感激!ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
解决方案 »
- 在窗体类中,加一个静态的成员指向自己,就可以被其他窗体随便引用了,这种方法有什么不好吗?
- 附加sql server数据库失败,是不是sql 2000跟 sql2005 不兼容?要怎么办?错误 602 未能在sysindexes 中找到数据库ID 18 中对象ID 1的索引 ID1 对应的行。请对sysindexes 运行DBCC CHECKTA
- xml xsd校验问题
- 簡單的c#問題急.
- datalist中的lable的visible属性如何控制
- C#学习群 13822746,真诚欢迎爱好c#的朋友加入!
- .net 中时间控件是哪个
- 急!C#,WEB工程,调用SQLLDR,丢失数据
- 实现加减乖除运算,如何编写代码。
- 一个初学者的求助!
- ######如何在组件里面使用图片#####
- 左右各一个ListBox,中间靠add>>, remove<<添加删除项,是什么控件?
#region 取网卡CPU序列号返回数组
/// <summary>
/// 取网卡CPU序列号返回数组
/// </summary>
/// <returns>返回数组</returns>
private static string[] GetCMID()
{
string[] textArray1 = new string[2];
ManagementClass class1 = new ManagementClass("WIN32_Processor");
ManagementObjectCollection collection1 = class1.GetInstances();
using (ManagementObjectCollection.ManagementObjectEnumerator enumerator1 = collection1.GetEnumerator())
{
while (enumerator1.MoveNext())
{
ManagementObject obj1 = (ManagementObject)enumerator1.Current;
textArray1[0] = obj1.Properties["ProcessorId"].Value.ToString();
}
}
ManagementClass class2 = new ManagementClass("WIN32_NetworkAdapterConfiguration");
ManagementObjectCollection collection2 = class2.GetInstances();
using (ManagementObjectCollection.ManagementObjectEnumerator enumerator1 = collection2.GetEnumerator())
{
while (enumerator1.MoveNext())
{
ManagementObject obj2 = (ManagementObject)enumerator1.Current;
if ((bool)obj2["IPEnabled"])
{
textArray1[1] = obj2["MacAddress"].ToString().Replace(":", "").ToString();
}
}
}
return textArray1;
}
#endregion
为什么我用ManagementClass在两台机器(cpu分别是mp740、mp730)上获得的cpu序列号都是AFE9FBFF000006D8呢?
生成的号码唯一
为什么C#就不行了呢
leohuang(LEO)是怎么用的哦
{
private byte[] MachineCode;
private int EAX;
private static byte[] AssemblyValue;
private static int[] ValueTable = new int[ 256 ];
private static string StringToRun = "This is a really fun example";
private delegate void FUNCTIONDUMP();
[DllImport("user32", EntryPoint="CallWindowProc")]
public static extern int CallWindowProcA([ MarshalAs( UnmanagedType.LPArray) ]byte[] lpPrevWndFunc,ref int hWnd, [ MarshalAs( UnmanagedType.LPArray ) ]byte[] Msg, [ MarshalAs( UnmanagedType.LPArray ) ]int[] wParam, int lParam);
[DllImport("Kernel32.dll")]
private static extern long CopyMemory(ref long lpvDest,long lpvSource, long cbCopy);
[DllImport("user32", EntryPoint="CallWindowProc")]
public static extern int CallWindowProcB([ MarshalAs( UnmanagedType.LPArray) ]byte[] lpPrevWndFunc,int hWnd, [ MarshalAs( UnmanagedType.LPArray ) ]byte[] Msg, [ MarshalAs( UnmanagedType.LPArray ) ]byte[] wParam,[ MarshalAs( UnmanagedType.LPArray ) ]byte[] lParam); public CCpuInfo()
{
}
public static int CalculateFromAssembly( byte[] ByteArray )
{
int returnValue = 0;
int ByteSize = ByteArray.Length;
CallWindowProcA( AssemblyValue,ref returnValue, ByteArray, ValueTable,ByteSize );
return returnValue;
} unsafe public string GetCpuName()
{
string name = "";
byte[] CpuName1 = new byte[4];
byte[] CpuName2 = new byte[4];
byte[] CpuName3 = new byte[4];
try
{
byte[] StringByte;
InitializeVals();
System.Text.ASCIIEncoding UEnc = new System.Text.ASCIIEncoding();
StringByte = UEnc.GetBytes( StringToRun );
InitFunc();
CallWindowProcB(MachineCode,EAX,CpuName1,CpuName2,CpuName3);
}
catch(Exception ep)
{
MessageBox.Show(ep.Message+ep.StackTrace.ToString());
}
string name1 = "";
string name2 = "";
string name3 = "";
for(int i =0;i < 4;i ++)
{
name1 += System.Convert.ToChar(CpuName1[i]);
name2 += System.Convert.ToChar(CpuName3[i]);
name3 += System.Convert.ToChar(CpuName2[i]);
}
return name = name1 + name2 + name3;
}
public static void funcDump()
{ int x;
x =0;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
x =1;
x =1;
x = 4;
}
unsafe public int GetAddress(int Addr)
{
return (int)&Addr;
}
private void InitFunc()
{
EAX = 0;
MachineCode = new byte[35];
MachineCode[0] = 0X55;// 'push ebp
MachineCode[1] = 0x8B;// 'move ebp,esp
MachineCode[2] = 0xEC;
MachineCode[3] = 0x57;// 'push edi
MachineCode[4] = 0x52;// 'push edx
MachineCode[5] = 0x51;// 'push ecx
MachineCode[6] = 0x53;// 'push ebx
MachineCode[7] = 0x8B;// 'move eax,dword ptr [ebp+8]
MachineCode[8] = 0x45;
MachineCode[9] = 0x8;
MachineCode[10] = 0xF;// 'cpuid
MachineCode[11] = 0xA2;
MachineCode[12] = 0x8B;// 'mov edi,dword ptr [ebp+12]
MachineCode[13] = 0x7D;
MachineCode[14] = 0xC;
MachineCode[15] = 0x89;// 'move dword ptr [edi],ebx
MachineCode[16] = 0x1F;//
MachineCode[17] = 0x8B;// 'mov edi,dword ptr [ebp+16]
MachineCode[18] = 0x7D;//
MachineCode[19] = 0x10;//
MachineCode[20] = 0x89;// 'move dword ptr [edi],ecx
MachineCode[21] = 0xF;//
MachineCode[22] = 0x8B;// 'mov edi,dword ptr [ebp+20]
MachineCode[23] = 0x7D;//
MachineCode[24] = 0x14;//
MachineCode[25] = 0x89;// 'move dword ptr [edi],edx
MachineCode[26] = 0x17;//
MachineCode[27] = 0x58;// 'pop ebx MachineCode[28] = 0x59;// 'pop ecx MachineCode[29] = 0x5A;// 'pop edx MachineCode[30] = 0x55;// 'pop edi
MachineCode[31] = 0xC9;// 'leave MachineCode[32] = 0xC2;// 'ret 16 I tried everything from 0 to 24
MachineCode[33] = 0x10;// ' but all produce the stack error
MachineCode[34] = 0x0;//
}
private static void InitializeVals()
{
int i;
string assemblyCode;
for ( i=0; i<=255; i++ )
{
ValueTable[i]= ( i * 81 ) % ( 90 + i );
}
try
{
assemblyCode = "558EC57565053518B45088B008B750C8B7D108B4D1433DB8A1E03049F464975F78B4D088901595B585E5F8BE55DC21000";
AssemblyValue = new byte[ assemblyCode.Length / 2 ];
for ( i=0; i< assemblyCode.Length - 1; i+=2 ) /* TRANSWARNING: check comparison operator (negative step?) in for loop */
{
string tmp = assemblyCode.Substring(i,2);
AssemblyValue[i/2] = byte.Parse(tmp,System.Globalization.NumberStyles.HexNumber);
}
}
catch(Exception ep)
{
MessageBox.Show(ep.Message + ep.StackTrace.ToString());
}
}
}
一般采用取 CPU+硬盘的,这样唯一性高点。
不知道对不啊
救命啦!