获取CPUID急救!!!

d52787790 2009-06-23 10:15:25
加精
如题
要支持builder 5 的,能测出CPU速度大于2G的CPUID;
给下源代码,
给个相关接口也行。
谢谢了
...全文
1992 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang52heng 2012-07-18
  • 打赏
  • 举报
回复
牛。一直在学习 重未想过要超越。。。。。
zheguzai000 2011-11-21
  • 打赏
  • 举报
回复
牛人啊,又学习了
feifei247 2010-07-08
  • 打赏
  • 举报
回复
高手!
bike_vagrant 2009-12-31
  • 打赏
  • 举报
回复
mark
majibutt 2009-12-10
  • 打赏
  • 举报
回复
高手!學習一下!
zyj3500 2009-06-24
  • 打赏
  • 举报
回复
学习了
d52787790 2009-06-23
  • 打赏
  • 举报
回复
妖哥,99我啊

project->options->hash table capacity 也改为32K(32768)了;

但是在其他机子上运行了,这是怎么回事啊?
谢谢妖哥了;
但是我们的机子cpuid怎么都一样啊?
d52787790 2009-06-23
  • 打赏
  • 举报
回复

弹出错误提示框
can,t open file ...(路径)

[C++ Warning] Unit1.cpp(4): W8058 Cannot create pre-compiled header: write failed
[C++ Warning] Unit1.cpp(23): W8002 Restarting compile using assembly
[C++ Warning] Unit1.cpp(4): W8058 Cannot create pre-compiled header: write failed
[Tasm Fatal Error] Out of hash space
kese 2009-06-23
  • 打赏
  • 举报
回复
试试 GetCPInfoEx 看看行不行。
BOOL GetCPInfoEx (
UINT CodePage,
DWORD dwFlags,
LPCPINFOEX lpCPInfoEx
);


typedef struct _cpinfoex {
UINT MaxCharSize;
BYTE DefaultChar[MAX_DEFAULTCHAR];
BYTE LeadByte[MAX_LEADBYTES];
WCHAR UnicodeDefaultChar;
UINT CodePage;
TCHAR CodePageName[MAX_PATH];
} CPINFOEX, *LPCPINFOEX;
周药师 2009-06-23
  • 打赏
  • 举报
回复

妖哥神速...
周药师 2009-06-23
  • 打赏
  • 举报
回复
记得以前见过 飘遥的安吉儿 老大 写的获取CPUID的代码
今天翻出来
楼主去试试
http://topic.csdn.net/t/20041119/09/3567517.html
ccrun.com 2009-06-23
  • 打赏
  • 举报
回复
String __fastcall GetCPUID()
{
#define CPUID dw 0xa20f
DWORD dwCPUName, dwCPUReserved1, dwCPUReserved2, dwCPUID;
String strCPUID;
asm
{
PUSHAD
MOV EAX, 1
CPUID
MOV dwCPUName, EAX
MOV dwCPUReserved1, EBX
MOV dwCPUReserved2, ECX
MOV dwCPUID, EDX
POPAD
}
strCPUID.sprintf("%.8X", dwCPUID);
return strCPUID;
}
d52787790 2009-06-23
  • 打赏
  • 举报
回复
c和c++的都可以,要源代码
efeeler1925 2009-06-23
  • 打赏
  • 举报
回复
没用过,帮顶!
linsw007 2009-06-23
  • 打赏
  • 举报
回复
路过学习了
pengxiasheng 2009-06-23
  • 打赏
  • 举报
回复
顶起再说
d52787790 2009-06-23
  • 打赏
  • 举报
回复
首先谢谢老妖,不辞辛苦,大中午的不休息啊;
恩,再次谢谢weill 。
学习了
weill 2009-06-23
  • 打赏
  • 举报
回复
又及,估计每CPU的dwCPUReserved1返回可能不同,也许可以用它来做标志,只不过,在多核、多CPU上,那就只能来个百次重复以保证收集该台机的所有CPU的特征了。
weill 2009-06-23
  • 打赏
  • 举报
回复
又及,如果你要照抄老妖(ccrun)的,那么,
MOV dwCPUName, EAX
MOV dwCPUReserved1, EBX
MOV dwCPUReserved2, ECX
这三行就免了叭,这玩MOV过去又没下文,这不是浪费CPU时间么,呵呵。

我来解说一下这段代码吧:



String GetCPUID()//取CPUID。
{
#define CPUID dw 0xa20f //定义端口初始化值(将这个数据发向CPU)

//用于输出 CPU的名称、CPU的Reserved1、CPU的Reserved2、CPU的ID
DWORD dwCPUName, dwCPUReserved1,dwCPUReserved2,dwCPUID;

String strCPUID;
asm
{
PUSHAD//压栈(把前面进行的东西的信息先收集起来)
MOV EAX, 1//这两行是规定用法,是Intel的CPU的标准取CPUID的命令,没什么可说。
CPUID//这两行用完后,EAX、EBX、ECX、EDX中就有你想要的信息了。
MOV dwCPUName, EAX//将EAX中的值放到dwCPUName中
MOV dwCPUReserved1, EBX//将EBX中的值放到dwCPUName中
MOV dwCPUReserved2, ECX//将ECX中的值放到dwCPUName中
MOV dwCPUID, EDX//将EDX中的值放到dwCPUName中
POPAD//出栈//(把前面进行的东西的信息释放出来)
}
strCPUID.sprintf("%08X-%08X-%08X", dwCPUID,dwCPUName,dwCPUReserved2);//dwCPUReserved1不用 这是标准的C语言的输出
return strCPUID;
}



这回能看懂了叭,呵呵,抄代码也别光抄,至少搞清代码的意思,这样才能学得更多哦。
weill 2009-06-23
  • 打赏
  • 举报
回复
一、网上流行的这段代码不能取出CPU的唯一值。
二、Intel原来曾经想搞出CPU的唯一值来着,但是受到多个国家,包括中国的反对。就算有唯一值的CPU,也有很多的主板上有这样一项开关:“是否允许CPU ID被获取”。该事件大约是在P3刚出时。
三、ccrun给出的这段代码可以加以完善一些,可以更好地区分出CPU,修改如下:


String GetCPUID()//取CPUID。
{
#define CPUID dw 0xa20f
DWORD dwCPUName, dwCPUReserved1,dwCPUReserved2,dwCPUID;
String strCPUID;
asm
{
PUSHAD
MOV EAX, 1
CPUID
MOV dwCPUName, EAX
MOV dwCPUReserved1, EBX
MOV dwCPUReserved2, ECX
MOV dwCPUID, EDX
POPAD
}
strCPUID.sprintf("%08X-%08X-%08X", dwCPUID,dwCPUName,dwCPUReserved2);//dwCPUReserved1不用
return strCPUID;
}



特别说明:dwCPUReserved1在多核、多CPU电脑中因为处理这段代码的CPU的核心不同,会返回不同值。也许如果你想知道这台电脑是否是多核,你可以多次取它的返回值。如果只是想取机器的特征,dwCPUReserved1还是忽略的好。

四、同型号,同一批次的CPU,特别是比如某单位同一批进的同型号的电脑,使用上面的代码,返回的值十之八九相同。
加载更多回复(5)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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