VC获取硬件信息(如硬盘物理序列号及CPUID,主板序列号等等) ??

pku2009 2008-11-13 05:58:39
如题,公司开发的软件,要实现和某个计算机绑定。

注:是物理的,不是分区的,就是取得的东西必须是机子独一无二的标识。


多谢啦,在线等啊!
...全文
11756 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamgis 2012-10-25
  • 打赏
  • 举报
回复
标记,哈哈哈……
路还很长哦 2012-07-05
  • 打赏
  • 举报
回复
mark
lyre1986 2012-05-03
  • 打赏
  • 举报
回复
前人栽树后人乘凉,在此谢过~
a988041 2012-01-10
  • 打赏
  • 举报
回复
我来了
linmeng09 2011-11-05
  • 打赏
  • 举报
回复
学习中
跨越时空,感谢各位热心的同志
sdsddd234 2011-09-13
  • 打赏
  • 举报
回复
一年多了 我又搜到这帖子了
shellfish567 2011-05-23
  • 打赏
  • 举报
回复
跨越时空的礼赞
牧羊君 2010-09-26
  • 打赏
  • 举报
回复
不容易呀,看个贴子不得回复才能看!
tobeto1314 2010-07-09
  • 打赏
  • 举报
回复
xuexi
flyer821003 2010-06-22
  • 打赏
  • 举报
回复
好贴,mark一下,留着以后用!~
zlxme 2010-06-04
  • 打赏
  • 举报
回复
好贴,收藏!
jernymy 2010-01-20
  • 打赏
  • 举报
回复
收藏了
aboutin 2010-01-19
  • 打赏
  • 举报
回复
学习了......
------------------------------
w6316 2010-01-18
  • 打赏
  • 举报
回复
好好好
okyzx 2010-01-17
  • 打赏
  • 举报
回复
好贴
ahubuntu 2009-05-24
  • 打赏
  • 举报
回复
跨越时空赞下楼主和各位好心人.....
pku2009 2008-11-27
  • 打赏
  • 举报
回复
现在可以了,上边获取CPIID还有个小问题,

_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);

要先判断edx的18位是否为1,为1则CPU有序列号,为没有。若有再执行下边。。。。
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
硬盘物理序列号在http://www.vckbase.com/document/viewdoc/?id=706有个封装好的类。
这个也不错,可以了解下CPU
http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c9087/

pku2009 2008-11-18
  • 打赏
  • 举报
回复
CSDN资源里有《VC获取CPU ID号》可以用的,
还是把关键代码发一下吧



char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm
{
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}

SetDlgItemText(IDC_STATIC1,OEMString); //CPU名称

_asm
{
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}

int iCPUFamily=(0xf00 & iEAXValue)>>8;
char Family[10]={0};
itoa(iCPUFamily,Family,10);
SetDlgItemText(IDC_STATIC2,Family); //CPU系列

_asm
{
mov eax,2
CPUID
}

char szCPUID[129]={NULL};
char szTmp[33]={NULL};
unsigned long s1 = 0,s2=0;

_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcat(szCPUID, szTmp);
SetDlgItemText(IDC_STATIC3,szCPUID); //CPUID号



在这里再次感谢那位上传资源的朋友。

现在问题是有的CPU不支持cpuid指令(而且“很多主板可以硬屏蔽对CPU序列号读取命令”),那该怎么办呢?

还发现一个网址,给大家做参考。http://www.weste.net/2006/6-12/11380593215-2.html
llg84 2008-11-14
  • 打赏
  • 举报
回复
那用户更换硬件怎么办?
xuxingok 2008-11-14
  • 打赏
  • 举报
回复
学习了
加载更多回复(11)

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧