请问怎么得到电脑的网卡MAC地址以及CPU序列号这些信息? 有没有专门的API可以调用?谢谢各位 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MAC地址好像是放在注册表里的CPU序列号就不知道了 http://community.csdn.net/Expert/topic/4138/4138495.xml?temp=.828396 注册表是容易取到的,但如何取到物理的,真正的mac,不知道谁做出来了。我曾经用过vmware,结果,一个网卡有两个MAC地址,呵呵,不知道哪个才是真的。 用嵌入式汇编取CPU ID DWORD dwCpuID; _asm { mov eax, 1 cpuid mov dwCpuID, edx } MAC地址 GetAdaptersInfo()CPU序列号,用汇编,而且是能获得以前的CPU,现在的都没了 BYTE szSystemInfo[4096]; UINT uSystemInfoLen = 0; BOOL bException = FALSE; BYTE szCpu[16] = { 0 }; UINT uCpuID = 0U; __try { _asm { mov eax, 0 cpuid mov dword ptr szCpu[0], ebx mov dword ptr szCpu[4], edx mov dword ptr szCpu[8], ecx mov eax, 1 cpuid mov uCpuID, edx } } __except( EXCEPTION_EXECUTE_HANDLER ) { bException = TRUE; } if( !bException ) { CopyMemory( szSystemInfo + uSystemInfoLen, &uCpuID, sizeof( UINT ) ); uSystemInfoLen += sizeof( UINT ); uCpuID = strlen( ( char* )szCpu ); CopyMemory( szSystemInfo + uSystemInfoLen, szCpu, uCpuID ); uSystemInfoLen += uCpuID; } int ClassNetSetting::GetMacAddress(LPMAC_ADDRESS pMacAddr){ NCB ncb; UCHAR uRetCode; int num = 0; LANA_ENUM lana_enum; memset(&ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBENUM; ncb.ncb_buffer = (unsigned char *)&lana_enum; ncb.ncb_length = sizeof(lana_enum); //向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡 //每张网卡的编号等 uRetCode = Netbios(&ncb); if (uRetCode == 0) { num = lana_enum.length; //对每一张网卡,以其网卡编号为输入编号,获取其MAC地址 for (int i = 0; i < num; i++) { ASTAT Adapter; if(GetAddressByIndex(lana_enum.lana[i],Adapter) == 0) { pMacAddr[i].b1 = Adapter.adapt.adapter_address[0]; pMacAddr[i].b2 = Adapter.adapt.adapter_address[1]; pMacAddr[i].b3 = Adapter.adapt.adapter_address[2]; pMacAddr[i].b4 = Adapter.adapt.adapter_address[3]; pMacAddr[i].b5 = Adapter.adapt.adapter_address[4]; pMacAddr[i].b6 = Adapter.adapt.adapter_address[5]; } } } return num;}UCHAR ClassNetSetting::GetAddressByIndex(int lana_num, ASTAT &Adapter){ NCB ncb; UCHAR uRetCode; memset(&ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_num; //指定网卡号,首先对选定的网卡发送一个NCBRESET命令,以便进行初始化 uRetCode = Netbios(&ncb ); memset(&ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_num; //指定网卡号 strcpy((char *)ncb.ncb_callname,"* " ); ncb.ncb_buffer = (unsigned char *)&Adapter; //指定返回的信息存放的变量 ncb.ncb_length = sizeof(Adapter); //接着,可以发送NCBASTAT命令以获取网卡的信息 uRetCode = Netbios(&ncb ); return uRetCode;} CString GetCPUID(){ CString CPUID; unsigned long s1,s2; unsigned char vendor_id[]="------------"; char sel; sel='1'; CString VernderID; CString MyCpuID,CPUID1,CPUID2; switch(sel) { case '1': __asm{ xor eax,eax cpuid mov dword ptr vendor_id,ebx mov dword ptr vendor_id[+4],edx mov dword ptr vendor_id[+8],ecx } VernderID.Format("%s-",vendor_id); __asm{ mov eax,01h xor edx,edx cpuid mov s1,edx mov s2,eax } CPUID1.Format("%08X%08X",s1,s2); __asm{ mov eax,03h xor ecx,ecx xor edx,edx cpuid mov s1,edx mov s2,ecx } CPUID2.Format("%08X%08X",s1,s2); break; case '2': { __asm{ mov ecx,119h rdmsr or eax,00200000h wrmsr } } AfxMessageBox("CPU id is disabled."); break; } MyCpuID = CPUID1+CPUID2; CPUID = MyCpuID; return CPUID;} 关于概念 谢谢大家能给予指导和帮助 在VC++中如何获取和设置datetimepick中的checkbox的选中状态? 按纽样式设计!!!!!在对话框上添加一按纽,如何实现当按下按纽时,按纽有明显的凹下去样式???????????马上解决,立刻给分..... 求助ado调用access? 想用ATL做个控件,但这是怎么回事? 高分求购编写FTP com组件的代码! 有关非模式窗口问题 如何控制打印出来的页面大小为某一固定尺寸? 如何获得框架的指针???? 怎样播放AVI文件//急救!! 怎么样让程序在windows的任务栏闪烁?? 关于WINSOCKET编程中的两个问题!!!急!!!
CPU序列号就不知道了
DWORD dwCpuID;
_asm
{
mov eax, 1
cpuid
mov dwCpuID, edx
}
CPU序列号,用汇编,而且是能获得以前的CPU,现在的都没了
UINT uSystemInfoLen = 0; BOOL bException = FALSE;
BYTE szCpu[16] = { 0 };
UINT uCpuID = 0U; __try
{
_asm
{
mov eax, 0
cpuid
mov dword ptr szCpu[0], ebx
mov dword ptr szCpu[4], edx
mov dword ptr szCpu[8], ecx
mov eax, 1
cpuid
mov uCpuID, edx
}
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
bException = TRUE;
}
if( !bException )
{
CopyMemory( szSystemInfo + uSystemInfoLen, &uCpuID, sizeof( UINT ) );
uSystemInfoLen += sizeof( UINT ); uCpuID = strlen( ( char* )szCpu );
CopyMemory( szSystemInfo + uSystemInfoLen, szCpu, uCpuID );
uSystemInfoLen += uCpuID;
}
{
NCB ncb;
UCHAR uRetCode;
int num = 0;
LANA_ENUM lana_enum;
memset(&ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *)&lana_enum;
ncb.ncb_length = sizeof(lana_enum);
//向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡
//每张网卡的编号等
uRetCode = Netbios(&ncb);
if (uRetCode == 0)
{
num = lana_enum.length;
//对每一张网卡,以其网卡编号为输入编号,获取其MAC地址
for (int i = 0; i < num; i++)
{
ASTAT Adapter;
if(GetAddressByIndex(lana_enum.lana[i],Adapter) == 0)
{
pMacAddr[i].b1 = Adapter.adapt.adapter_address[0];
pMacAddr[i].b2 = Adapter.adapt.adapter_address[1];
pMacAddr[i].b3 = Adapter.adapt.adapter_address[2];
pMacAddr[i].b4 = Adapter.adapt.adapter_address[3];
pMacAddr[i].b5 = Adapter.adapt.adapter_address[4];
pMacAddr[i].b6 = Adapter.adapt.adapter_address[5];
}
}
}
return num;
}
UCHAR ClassNetSetting::GetAddressByIndex(int lana_num, ASTAT &Adapter)
{
NCB ncb;
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;
//指定网卡号,首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
uRetCode = Netbios(&ncb );
memset(&ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; //指定网卡号
strcpy((char *)ncb.ncb_callname,"* " );
ncb.ncb_buffer = (unsigned char *)&Adapter;
//指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);
//接着,可以发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios(&ncb );
return uRetCode;
}
{
CString CPUID; unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
sel='1';
CString VernderID;
CString MyCpuID,CPUID1,CPUID2;
switch(sel)
{
case '1':
__asm{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
VernderID.Format("%s-",vendor_id);
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID2.Format("%08X%08X",s1,s2);
break;
case '2':
{
__asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
}
AfxMessageBox("CPU id is disabled.");
break;
}
MyCpuID = CPUID1+CPUID2;
CPUID = MyCpuID;
return CPUID;
}