ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7846|回复: 7

[求助] VBA程序如何用硬盘序列号进行注册?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-4-1 15:32 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大侠、老师:如附件(仅为示例),如果要对其进行与硬盘序列号捆绑进行注册,如何编写VBA代码?
要求:此EXCEL文件不能移植到其它电脑上,如果要移植此EXCEL文件,就需要注册(与硬件盘序列号对应),不注册时,此EXCEL文件就不能运行。
请老师、大侠不要笑话附件VBA水平的低下,仅为示例。再者,我查了网上一些内容,都没找到合适的,请老师、大侠指教,给出具体的代码。谢谢!

book1.rar

57.42 KB, 下载次数: 147

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-2 17:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大侠、老师、专家:请不昔指教,多多感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-2 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不好意思。附件有点错误,请参见此附件。

book1.rar

57.12 KB, 下载次数: 389

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-5 09:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-18 13:46 | 显示全部楼层
只要能获得硬盘序列号就好了,至于再怎么处理,就看你方便了。下面是获得硬盘序列号的代码!

Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA"     (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize  As Integer, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags  As Long, ByVal lpFileSystemNameBuffer As String,  ByVal nFileSystemNameSize As Long) As Long

Function GetSerialNumber(sRoot As String) As Long
    Dim lSerialNum As Long
    Dim R As Long
    Dim sTemp1 As String, sTemp2 As String
    strLabel = String$(255, Chr$(0))    '磁盘卷标
    strType = String$(255, Chr$(0))    '文件系统类型 一般为 FAT
    R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), lSerialNum, 0, 0, strType, Len(strType))
    GetSerialNumber = lSerialNum
End Function

TA的精华主题

TA的得分主题

发表于 2012-6-18 14:38 | 显示全部楼层
还有个关于获取硬盘,cpu,主板序列号的方法,如下:

Sub 磁盘物理序列号()
MsgBox GetObject("winmgmts:").InstancesOf("Win32_PhysicalMedia")("Win32_PhysicalMedia.Tag=""\\\\.\\PHYSICALDRIVE0""").SerialNumber
End Sub


Sub CPU序列号() '特别提示:这个不是唯一的,即有可能多个CPU同一一序列号
For Each 序列 In GetObject("Winmgmts:").InstancesOf("Win32_Processor")
MsgBox "CPU 序列号: " & CStr(序列.ProcessorId)
Next
End Sub


Sub 主板序列号()
    Dim objs As Object, Obj As Object, WMI As Object, 主板序列号
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("Win32_BaseBoard")
    For Each Obj In objs
       MsgBox "您的主板序列号是:" + Obj.SerialNumber
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2012-6-18 17:17 | 显示全部楼层
还是获取硬盘物理序列号为好,那是固定而唯一的!

TA的精华主题

TA的得分主题

发表于 2018-7-20 22:33 | 显示全部楼层
shesunone 发表于 2012-6-18 13:46
只要能获得硬盘序列号就好了,至于再怎么处理,就看你方便了。下面是获得硬盘序列号的代码!

Private De ...

老师,请问下,我运行了此代码,不知怎么么的,得到的结果为“0”值,可以烦请解释下吗,谢谢

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 16:40 , Processed in 0.028042 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表