主题:纯VFP代码实现取硬盘ID等硬件标志[重大更新,不看后悔!]
附件中是本人搜集的
VFP读取硬盘序列号(八种途径)更新.rar
好象是来自梅子论坛([url]http://www.meizvfp.com/bbs/index.asp[/url])
从这么多方法来看,其实取硬盘序号现在是个大众化的技术,没有什么特别的。WMI倒是可以好好研究一下
说明:这是利用WINDOWS内置的WMI实现,其实它的功能还远不只这一点,感兴趣的自己查资料吧。这个硬盘序号很多人在找,越搞越复杂了(特别是用VF来实现),特此提供。其实本方法也可用于其他语言的。以下内容保存为一个PRG文件就可以运行了(VISTA或WINDOWS7下必须有管理权限或关闭UAC,这一点和其他方法是一样的)
重磅炸弹(WMI Code Creator v1.0)见7楼,强烈推荐
整理了一下代码,添加了少量功能
2009-09-19修订(关于XP的,原来代码是在VISTA测试的)
**VFP读CPU序号、硬盘序号、网卡MAC地址、硬盘型号、IP地址
LOCAL oWMI AS OBJECT,oLocal AS OBJECT,oHARDWARE AS OBJECT,object1 AS OBJECT,lcCPUID,LcMAC,lcHDID,lcHDINFO,lcIP,lcHDID2
oWMI=CREATEOBJECT("WbemScripting.SWbemLocator")
oLocal=oWMI.ConnectServer(".", "root\cimv2")
*取CPU ID
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_Processor")
FOR EACH object1 IN oHARDWARE
lcCPUID=object1.Properties_('ProcessorId').VALUE
EXIT
ENDFOR
*取硬盘物理ID
*此方法在XP下面有一个BUG,以即如果硬盘序列是前面有空格的(象我的ST 500G就是),
*在XP下面会取到一个NULL值!但是VISTA下面工作正常
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_PhysicalMedia")
FOR EACH object1 IN oHARDWARE
lcHDID=object1.Properties_('SerialNumber').VALUE
EXIT
ENDFOR
*取MAC和IP
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled=1")
FOR EACH object1 IN oHARDWARE
LcMAC=object1.Properties_('MACAddress').VALUE
LcIP=object1.Properties_('IPAddress').VALUE
EXIT
ENDFOR
*取硬盘型号
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_DiskDrive")
FOR EACH object1 IN oHARDWARE
lcHDINFO=object1.Properties_('Model').VALUE
*硬盘物理ID(另一方法)
*此属性在XP和2003下面不存在,VISTA和WIN7可以通过
lcHDID2=object1.Properties_('SerialNumber').VALUE
EXIT
ENDFOR
*显示结果
?'CPU序号:',lcCPUID
*以下两个方法得出结果好象不一样,其实只是第1种已经转换成标准字符串了,第2种是原始形式的(以16进制描述的)
?'硬盘序号:',lcHDID
?'硬盘物理ID(另一方法):',lcHDID2
?'网卡MAC地址:',LcMAC
?'网卡IP地址:',LcIP
?'硬盘型号:',lcHDINFO
VFP读取硬盘序列号(八种途径)更新.rar
好象是来自梅子论坛([url]http://www.meizvfp.com/bbs/index.asp[/url])
从这么多方法来看,其实取硬盘序号现在是个大众化的技术,没有什么特别的。WMI倒是可以好好研究一下
说明:这是利用WINDOWS内置的WMI实现,其实它的功能还远不只这一点,感兴趣的自己查资料吧。这个硬盘序号很多人在找,越搞越复杂了(特别是用VF来实现),特此提供。其实本方法也可用于其他语言的。以下内容保存为一个PRG文件就可以运行了(VISTA或WINDOWS7下必须有管理权限或关闭UAC,这一点和其他方法是一样的)
重磅炸弹(WMI Code Creator v1.0)见7楼,强烈推荐
整理了一下代码,添加了少量功能
2009-09-19修订(关于XP的,原来代码是在VISTA测试的)
**VFP读CPU序号、硬盘序号、网卡MAC地址、硬盘型号、IP地址
LOCAL oWMI AS OBJECT,oLocal AS OBJECT,oHARDWARE AS OBJECT,object1 AS OBJECT,lcCPUID,LcMAC,lcHDID,lcHDINFO,lcIP,lcHDID2
oWMI=CREATEOBJECT("WbemScripting.SWbemLocator")
oLocal=oWMI.ConnectServer(".", "root\cimv2")
*取CPU ID
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_Processor")
FOR EACH object1 IN oHARDWARE
lcCPUID=object1.Properties_('ProcessorId').VALUE
EXIT
ENDFOR
*取硬盘物理ID
*此方法在XP下面有一个BUG,以即如果硬盘序列是前面有空格的(象我的ST 500G就是),
*在XP下面会取到一个NULL值!但是VISTA下面工作正常
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_PhysicalMedia")
FOR EACH object1 IN oHARDWARE
lcHDID=object1.Properties_('SerialNumber').VALUE
EXIT
ENDFOR
*取MAC和IP
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled=1")
FOR EACH object1 IN oHARDWARE
LcMAC=object1.Properties_('MACAddress').VALUE
LcIP=object1.Properties_('IPAddress').VALUE
EXIT
ENDFOR
*取硬盘型号
oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_DiskDrive")
FOR EACH object1 IN oHARDWARE
lcHDINFO=object1.Properties_('Model').VALUE
*硬盘物理ID(另一方法)
*此属性在XP和2003下面不存在,VISTA和WIN7可以通过
lcHDID2=object1.Properties_('SerialNumber').VALUE
EXIT
ENDFOR
*显示结果
?'CPU序号:',lcCPUID
*以下两个方法得出结果好象不一样,其实只是第1种已经转换成标准字符串了,第2种是原始形式的(以16进制描述的)
?'硬盘序号:',lcHDID
?'硬盘物理ID(另一方法):',lcHDID2
?'网卡MAC地址:',LcMAC
?'网卡IP地址:',LcIP
?'硬盘型号:',lcHDINFO