如何在WIN7下正确读出硬盘物理序列号?

fastgyk 2012-08-17 11:42:58
用木瓜的MyFll.fll控件在WIN7下大多数情况不能正确读出硬盘的物理序列号,请问有什么好的控件或语句能够解决此问题?
...全文
573 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市夜猫 2012-08-17
  • 打赏
  • 举报
回复
你上面这段获取的是 cpu 信息,要获取磁盘信息要将 Win32_Processor 改成 Win32_DiskDrive 类
vfp6 应该支持 on error 吧?
try 这段改成
cOldErr = on('error')
on error *
insert into GerInfo ...
on error &cOldErr

WMI 在很多情况下也获取不到正确的硬盘序列号
试试这个免费软件:http://www.winsim.com/diskid32/diskid32.exe
它通过尝试几种方法来获取序列号,看看在你的软硬件环境下是否可行。如果有管理员权限通常都没问题,不过这个软件也会尝试不需要管理员权限的几种方法。
把输出重定向到一个文本 diskid32.exe > aaa.txt,然后分析这个文本中的序列号字段

由于这个一个免费且开源的软件,如果你熟悉 c++ 的话,可以下载它的源程序,并做适当改写后直接用于 vfp
diskid32.cpp
diskid32.dsp
diskid32.dsw



fastgyk 2012-08-17
  • 打赏
  • 举报
回复
你好,十豆三教师:
我用的是VF6.0,其中TRY语句不识别,另外我只想去硬盘的物理序列号,如何改如下程序?谢谢!

oWMI=Getobject('winmgmts:') && vfp9.0
m.cWin32Class='Win32_Processor' && CPU信息 ( ProcessorId 项为序列号)
oItems=oWMI.ExecQuery('Select * From '+m.cWin32Class)
Create Cursor GetInfo (_Property C(50),_Value C(200))
For Each oItem In oItems && 如有多个相同类型设备,也一齐取出。(如取硬盘信息时,有多块硬盘时也会全部取出)
For Each oProperty In oItem.Properties_
lcName=oProperty.Name
lcVal=Transform(oProperty.Value)
Try
Insert Into GetInfo Values (lcName,lcVal)
Catch
Endtry
Endfor
Endfor
Locate
Browse
Return
十豆三 2012-08-17
  • 打赏
  • 举报
回复
<通过WMI获取系统.进程.CPU.磁盘.分区.网卡.主板.内存.显卡.共享.键盘.鼠标等信息>
http://blog.csdn.net/apple_8180/article/details/6663443
fastgyk 2012-08-17
  • 打赏
  • 举报
回复
写错了,是非常感谢!
fastgyk 2012-08-17
  • 打赏
  • 举报
回复
非常谢谢!
十豆三 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
以下语句可以成功读出硬盘序列号,但在WIN7下没有试验是否可行:
Local oWMI As Object,oLocal As Object,oHARDWARE As Object,object1 As Object,lcCPUID,LcMAC,lcHDID,lcSerial,lcIP
oWMI=Createobject("WbemScripting.SWbemLocator")
oLoca……
[/Quote]你试下 Win7 中能否取出,很有可能需要管理员权限。
fastgyk 2012-08-17
  • 打赏
  • 举报
回复
以下语句可以成功读出硬盘序列号,但在WIN7下没有试验是否可行:
Local oWMI As Object,oLocal As Object,oHARDWARE As Object,object1 As Object,lcCPUID,LcMAC,lcHDID,lcSerial,lcIP
oWMI=Createobject("WbemScripting.SWbemLocator")
oLocal=oWMI.ConnectServer(".", "root\cimv2")
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_PhysicalMedia")
For Each object1 In oHARDWARE
lcHDID=object1.Properties_('SerialNumber').Value
Exit
Endfor
?'硬盘序号:',lcHDID

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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