| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4013 人关注过本帖
标题:如何获取cpuid?
只看楼主 加入收藏
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
结帖率:96.03%
收藏
已结贴  问题点数:40 回复次数:13 
如何获取cpuid?
我的如下方法:
SET LIBRARY TO myfll
t=GetCpuId()
SET LIBRARY TO
THISFORM.TEXT1.VALUE=t

结果我得到的可能只是cpu的类型,有些同款机型得到的数值是完全相同的。
请问如何得到唯一的cpu序列号?(用于程序加密)
搜索更多相关主题的帖子: 获取 SET LIBRARY cpu 相同 
2018-11-11 16:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
CPU的ID信息好象是没有唯一的
这样看看是否一样:
oService = Getobject("winmgmts:")
oClasses = oService.InstancesOf("Win32_Processor")
FOR EACH oClass IN oClasses
    ? "Processor ID:" + NVL(oClass.ProcessorId, "<NULL>")
ENDFOR
2018-11-11 22:24
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1744
专家分:3333
注 册:2012-2-29
收藏
得分:0 
回复 2楼 吹水佬
可以正常获取,谢谢吹版!
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2018-11-12 07:03编辑过]

2018-11-12 07:02
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
收藏
得分:0 
回复 2楼 吹水佬
同型号上机子上获取结果也是相同的。
2018-11-12 07:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
回复 4楼 su0527
没有唯一的
2018-11-12 08:30
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
收藏
得分:0 
回复 5楼 吹水佬
百度搜索后了解到:序列号有96位,前32是cpu类型码(故相同类型的机子很可能是相同的码),后64位,是唯一的。这是这种说法正确与否。
如果正确,后64位如何求得呢?
2018-11-12 13:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
回复 6楼 su0527
可能对“序列号”的理解不同
我理解的是CPU自身内部的ID信息 Processor ID
可在 cmd 窗口执行 wmic CPU get ProcessorID 查看
图片附件: 游客没有浏览图片的权限,请 登录注册

2018-11-12 14:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
搜了一下有这样的说法:
CPU ID不是 CPU Serial Number
CPU ID是指CPU的型号,同一批相同规格相同修订版本的处理器,ID是一样的。
只有PIII(奔腾三)处理器有唯一的序列号,因为涉嫌暴露用户隐私,之后Intel不再加入序列号,并且发布补丁,默认关闭序列号读取功能,几乎所有的厂商默认都是关闭的。
所以几乎可以认为没有CPU序列号一说。
2018-11-12 14:50
su0527
Rank: 2
等 级:论坛游民
帖 子:452
专家分:79
注 册:2015-1-10
收藏
得分:0 
回复 7楼 吹水佬
看来还是硬盘序列号更可靠些,
请吹版帮我看一下下面的问题:
我用命令查看磁盘序列号,和用代码查看磁盘序列号结果分别如下,为什么会有不同呢?
代码:
SET LIBRARY TO myfll
t=ALLTRIM(GetDiskSerial()) &&硬盘序列号
?t
SET LIBRARY TO

结果分别如图
命令查看的结果
图片附件: 游客没有浏览图片的权限,请 登录注册


代码求得的结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


2018-11-12 15:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:40 
回复 9楼 su0527
可能也是理解不同,ID与Serial Number应该是不同的。
看 Win32_DiskDrive Class 和 Win32_LogicalDisk Class 的描述:
? "** 物理磁盘驱动器 ******"
oService = GETOBJECT("winmgmts:")
oClasses = oService.InstancesOf("Win32_DiskDrive")
FOR EACH oClass IN oClasses
    ?
    ? "#" + TRANSFORM(NVL(oClass.index, "<NULL>")) + " 驱动器 - " + NVL(oClass.Description, "<NULL>") + 0h0D0A +;
        "接口类型.." + NVL(oClass.InterfaceType, "<NULL>") + 0h0D0A +;
        "型号......" + NVL(oClass.Model, "<NULL>") + 0h0D0A +;
        "序列号...." + ALLTRIM(NVL(oClass.SerialNumber, "<NULL>")) + 0h0D0A +;
        "固件号...." + NVL(oClass.FirmwareRevision, "<NULL>") + 0h0D0A +;
        "容量......" + LTRIM(TRANSFORM(VAL(NVL(oClass.Size, "<NULL>")), "999,999,999,999,999")) + " Byte"
    ?
    WAIT
    ?
ENDFOR
? "** 逻辑磁盘驱动器 ******"
oClasses = oService.InstancesOf("Win32_LogicalDisk")
FOR EACH oClass IN oClasses
    ? "盘符........" + NVL(oClass.DeviceID, "<NULL>") + 0h0D0A +;
        "类型........" + NVL(oClass.Description, "<NULL>") + 0h0D0A +;
        "文件系统...." + NVL(oClass.FileSystem, "<NULL>") + 0h0D0A +;
        "空间大小...." + LTRIM(TRANSFORM(VAL(NVL(oClass.Size, "<NULL>")), "999,999,999,999,999")) + " Byte" + 0h0D0A +;
        "可用空间...." + LTRIM(TRANSFORM(VAL(NVL(oClass.FreeSpace, "<NULL>")), "999,999,999,999,999")) + " Byte" + 0h0D0A +;
        "卷标........" + NVL(oClass.VolumeName, "<NULL>") + 0h0D0A +;
        "卷标序列号.." + NVL(oClass.VolumeSerialNumber, "<NULL>")
    ?
    WAIT
    ?
ENDFOR
2018-11-12 15:26
快速回复:如何获取cpuid?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080552 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved