找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 12670|回复: 8

【VB】获取U盘序列号[非常实用源码]

[复制链接]

1

主题

1

回帖

69

积分

用户组: 小·技术宅

UID
1961
精华
1
威望
5 点
宅币
51 个
贡献
1 次
宅之契约
0 份
在线时间
1 小时
注册时间
2016-9-16
发表于 2016-9-17 00:21:44 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
做软件的小伙伴们,有没有想过有一天你开发出来的软件,别人需要注册才能使用?而注册的话,除了传统方式的输入用户名和注册码,还需要插入指定的U盘才能打开软件?
如果你已经工作了,并且还是在销售部门里坐办公室之类的。你很可能已经见识过公司里的一些管理系统,除了需要输入用户名和密码验证以外,其实电脑后面的USB接口还插着一个U盘(这个U盘叫密匙U盘,或者叫加密狗)
那么,这个加密狗又是怎么回事呢??
简单来说,加密狗的作用就是,你打开软件,软件会检测你的电脑是否已经插入了带有密匙信息的U盘,如果没有插入,那么软件启动失败!插入了不正确的U盘,即验证失败!只有插入正确的带有指定信息的U盘,你的程序才能正常打开。
大家是不是已经对这个加密狗很感兴趣了??或者有些童鞋可能会担忧,貌似那些功能都是企业用的比较多,技术上,会不会很难呀??关于这点,看完本帖子,大家就清楚了。
好了,废话说了,原理也说了,下面就给大家展示一下干货吧!!
首先打开VB,新建一个窗体,在上面添加一个标签(命名为U盘序列号),再添加一个textbox,如下图:
001.jpg
接着添加代码,新建一个标准模块(命名为GetUDiskNum),输入代码如下:
----------------------------------------------------------------
Public Function GetUSBPath() '获取U盘盘符
Dim d, i As Integer
Set d = CreateObject("Scripting.FileSystemObject")
For i = 68 To 90
  If d.DriveExists(Chr(i)) Then
    If (d.GetDrive(Chr(i)).DriveType = 1) Then
    'Print "发现可移动磁盘:" & Chr(i)
    GetUSBPath = Chr(i) & ":"
    End If
  End If
Next
End Function

Public Function GetUSBVID() 'GetUSBVID() '根据U盘盘符获取序列号
    Dim objWMIService As Object
    Dim USBDevices As Object, USBDevice As Object, USBDiskPartitions As Object, USBDiskPartition As Object, LogicalUSBDisks As Object, LogicalUSBDisk As Object
    Dim strID() As String
    Dim Finded As Boolean
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set USBDevices = objWMIService.execquery("Select * From Win32_DiskDrive where InterfaceType='USB'")
    For Each USBDevice In USBDevices
        If Finded Then Exit For
        Set USBDiskPartitions = objWMIService.execquery("Associators of {Win32_DiskDrive.DeviceID='" & USBDevice.DeviceId & "'} where AssocClass = Win32_DiskDriveToDiskPartition")
        For Each USBDiskPartition In USBDiskPartitions
            Set LogicalUSBDisks = objWMIService.execquery("Associators of {Win32_DiskPartition.DeviceID='" & USBDiskPartition.DeviceId & "'} where AssocClass = Win32_LogicalDiskToPartition")
            For Each LogicalUSBDisk In LogicalUSBDisks
                If LogicalUSBDisk.DeviceId = UCase(GetUSBPath) Then
                    strID = Split(USBDevice.PNPDeviceID, "\")
                    strID = Split(strID(UBound(strID)), "&")
                    GetUSBVID = strID(0)
                    Finded = True
                End If
            Next
        Next
        DoEvents
Next
    Set USBDevices = Nothing
    Set USBDevice = Nothing
    Set USBDiskPartitions = Nothing
    Set USBDiskPartition = Nothing
    Set LogicalUSBDisks = Nothing
    Set LogicalUSBDisk = Nothing
End Function
----------------------------------------------------------------
写好标准模块代码之后,再回来窗体这,双击窗体(或者右击打开代码界面),输入代码如下:
Private Sub Form_Load()
If GetUSBVID = "" Then
MsgBox "未插入U盘,请插入U盘后重新打开软件!", vbExclamation + vbOKOnly, "错误提示"
Else
Text1.Text = GetUSBVID
End If
End Sub

至此,保存工程,生成EXE文件,一打开软件,就可以看到文本框中出现U盘的序列号了!当然了,前提是你插入了U盘。

有童鞋可能会问:就只是获取个U盘序列号呀?没有了吗?不是说插入U盘验证不正确就不能打开软件吗?就这么简单,还能不能愉快的交流了??

关于这个,童鞋们可以自由发挥,例如,大家可以将获得的序列号通过MD5加密,然后截取中间10个字符作为验证码也是可以的呀,当然了,验证码还可以设置复杂一点。

然后你的软件弄一个保存验证码信息的,每次启动的时候,首先获取U盘的序列号,通过算法得出验证码,再跟存储的验证码一对比,一样的话,就是验证正确,不一样的话,就警告并退出。

说的这么明白了,相信大家都理解了吧??如果不理解的话,那就去我的淘宝小店(店铺名:凌寒资源)看一下我的作品:账号管家  (账号管家就是利用这个原理制作的,当然了,验证码肯定不是这么简答啦,哈哈)

如果看帖子看不是很明白,需要看实例源码的话,可以下载附件哦。

VB获取U盘序列号源码[by凌寒].rar

2.52 KB, 下载次数: 138

VB源码

本帖被以下淘专辑推荐:

回复

使用道具 举报

0

主题

24

回帖

56

积分

用户组: 小·技术宅

UID
2067
精华
0
威望
1 点
宅币
29 个
贡献
1 次
宅之契约
0 份
在线时间
0 小时
注册时间
2016-11-17
发表于 2016-11-17 10:31:34 | 显示全部楼层
支持    !!
回复 赞! 靠!

使用道具 举报

0

主题

4

回帖

15

积分

用户组: 初·技术宅

UID
2077
精华
0
威望
0 点
宅币
11 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2016-11-21
发表于 2016-11-21 16:44:50 | 显示全部楼层
谢谢
回复

使用道具 举报

0

主题

28

回帖

4278

积分

用户组: 真·技术宅

UID
3513
精华
0
威望
12 点
宅币
4226 个
贡献
0 次
宅之契约
0 份
在线时间
381 小时
注册时间
2018-3-1
发表于 2019-2-16 10:12:27 | 显示全部楼层
感谢楼主的分享
回复 赞! 靠!

使用道具 举报

0

主题

1

回帖

15

积分

用户组: 初·技术宅

UID
5867
精华
0
威望
2 点
宅币
10 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2020-4-26
发表于 2020-4-26 12:09:59 | 显示全部楼层
感谢楼主的分享
回复 赞! 靠!

使用道具 举报

0

主题

2

回帖

23

积分

用户组: 初·技术宅

UID
5896
精华
0
威望
6 点
宅币
9 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2020-5-11
发表于 2020-5-11 10:28:26 | 显示全部楼层
谢谢楼主的经常分享,挺详细的
回复 赞! 靠!

使用道具 举报

1

主题

60

回帖

333

积分

用户组: 中·技术宅

UID
6035
精华
0
威望
2 点
宅币
266 个
贡献
0 次
宅之契约
0 份
在线时间
29 小时
注册时间
2020-7-7
发表于 2020-7-8 10:17:29 | 显示全部楼层
本帖最后由 china_shy_wzb 于 2020-7-20 13:56 编辑

是一个好例子,支持
回复 赞! 靠!

使用道具 举报

0

主题

1

回帖

22

积分

用户组: 初·技术宅

UID
7704
精华
0
威望
2 点
宅币
17 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2022-2-26
发表于 2022-2-27 09:23:58 | 显示全部楼层
为什么前面还有数据没有读出来?
回复 赞! 靠!

使用道具 举报

0

主题

16

回帖

45

积分

用户组: 初·技术宅

UID
7607
精华
0
威望
2 点
宅币
25 个
贡献
0 次
宅之契约
0 份
在线时间
8 小时
注册时间
2021-12-6
发表于 2022-4-5 11:34:27 | 显示全部楼层
是一个好例子,支持
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-3-29 04:32 , Processed in 0.056352 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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