ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]用U盘做加密狗,加密Excel文件(108楼有新代码!)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-9-9 13:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:保护和加密编程
GetDrive
开放分类: vb
GetDrive 方法         描述返回一个与指定路径中的驱动器相对应的 Drive 对象。语法object.GetDrive drivespecGetDrive 方法语法有如下几部分:部分描述Object必需的。始终是一个 FileSystemObject 的名字。Drivespec必需的。drivespec参数可以是一个驱动器字符(c)、一个驱动器字符加一个冒号(c:)、一个驱动器字符加冒号和路径分隔符(c:\)或任何网络共享的说明(\\computer2\share1)。说明对于网络共享,要进行检查以确保共享存在。如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。对一个普通路径字符串调用 GetDrive 方法,使用下面步骤得到一个适合作为 drivespec 使用的字符串:DriveSpec = GetDriveName(GetAbsolutePathName(Path))

TA的精华主题

TA的得分主题

发表于 2008-9-9 16:40 | 显示全部楼层

分享一下!

向各位高手学习!

向各位Excel专家学者致敬!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-9 16:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用富戈在2008-9-9 13:42:00的发言:

 如果有些恐龙时代的机器,还装有“软驱”的话,用 

Sub dd()
1:
Set fs = CreateObject("Scripting.FileSystemObject")
DrivesCount = fs.drives.Count
Set d = fs.GetDrive(Chr(66 + DrivesCount)) '因为没有B盘,所以用65+
dt = d.DriveType
If dt > 1 Then
    MsgBox "没有U盘,请插入U盘再试"
    GoTo 1
End If
s = d.SerialNumber  'U盘SerialNumber
If s=…… Then……

显然是不合适的。就算是 没有 软驱,最后一个盘符就一定为 U盘 吗?

常数描述
Unknown0无法确定驱动器类型。
Removable1可移动媒体驱动器,包括软盘驱动器和其他多种存储设备。
Fixed2固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
Remote3网络驱动器,包括网络上任何位置的共享驱动器。
CDROM4CD-ROM 驱动器,不区分只读和可读写的 CD-ROM 驱动器。
RAMDisk5RAM 磁盘,在本地计算机中占用一块“随机存取内存”(RAM) 虚拟为磁盘驱动器。

  磁盘的排列顺序为A: B: C: D: E: F: G: 等,软驱是在前面,接着是硬盘、光驱、U盘,它们的类型分别是 1、2、4、1,现在的计算机都有硬盘和光驱,可以判定,最后一个盘的类型为1,就是U盘。

TA的精华主题

TA的得分主题

发表于 2008-9-9 17:05 | 显示全部楼层
QUOTE:
以下是引用kxpc在2008-9-9 16:41:00的发言:

常数描述
Unknown0无法确定驱动器类型。
Removable1可移动媒体驱动器,包括软盘驱动器和其他多种存储设备。
Fixed2固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
Remote3网络驱动器,包括网络上任何位置的共享驱动器。
CDROM4CD-ROM 驱动器,不区分只读和可读写的 CD-ROM 驱动器。
RAMDisk5RAM 磁盘,在本地计算机中占用一块“随机存取内存”(RAM) 虚拟为磁盘驱动器。

  磁盘的排列顺序为A: B: C: D: E: F: G: 等,软驱是在前面,接着是硬盘、光驱、U盘,它们的类型分别是 1、2、4、1,现在的计算机都有硬盘和光驱,可以判定,最后一个盘的类型为1,就是U盘。

反正我是测试过的, U 盘不一定是最后一个。

而且还不算“先插优盘,后插移动硬盘”,我这里说的“移动硬盘”是用“笔记本硬盘”+“移动硬盘盒”组成的。还有 5寸盘的硬盘+移动硬盘盒  组成的盘符。这样得道的盘符排列,能得到最后一个盘符是 U盘吗?


[分享]利用U盘做密钥盘,加密Excel文件(已解决)

[分享]利用U盘做密钥盘,加密Excel文件(已解决)

TA的精华主题

TA的得分主题

发表于 2008-9-9 17:07 | 显示全部楼层
如果我映射一个网络硬盘,一般用最后一个盘符 Z ,那么最后一个盘符就一定不是 U盘了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-9-9 18:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用富戈在2008-9-9 17:07:00的发言:
如果我映射一个网络硬盘,一般用最后一个盘符 Z ,那么最后一个盘符就一定不是 U盘了。

是有这个问题。

那你就用7楼的代码试试,不会有任何问题的。

TA的精华主题

TA的得分主题

发表于 2008-9-9 18:55 | 显示全部楼层
QUOTE:
以下是引用富戈在2008-9-9 17:05:00的发言:

反正我是测试过的, U 盘不一定是最后一个。

而且还不算“先插优盘,后插移动硬盘”,我这里说的“移动硬盘”是用“笔记本硬盘”+“移动硬盘盒”组成的。还有 5寸盘的硬盘+移动硬盘盒  组成的盘符。这样得道的盘符排列,能得到最后一个盘符是 U盘吗?

    移动硬盘的类型是 2 ,网络盘的类型是 3

TA的精华主题

TA的得分主题

发表于 2008-9-9 22:41 | 显示全部楼层

厉害

厉害啊!原来还可以这样!

TA的精华主题

TA的得分主题

发表于 2008-9-9 23:06 | 显示全部楼层
这么好的东东,一定要多学习学习,谢谢了!

TA的精华主题

TA的得分主题

发表于 2008-9-9 23:48 | 显示全部楼层

测试完全通过!

Private Sub Workbook_Open()
On Error Resume Next
Set fs = CreateObject("Scripting.FileSystemObject")
    StrDrive = "B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    StrDriveArray = Split(StrDrive, ",")
    For StartPos = 1 To UBound(StrDriveArray)
        Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(StrDriveArray(StartPos) & ":\\")))
        If d.DriveType = 1 Then
            s = d.serialnumber
            s = 682417999 'U盘序列号
            Exit Sub
        End If
    Next
    If s = "" Then
        MsgBox "找不到密钥盘,系统将退出。"
        ThisWorkbook.Close False
    End If
End Sub

下面是检查U盘序列号的代码

Sub 检查U盘序列号()
On Error Resume Next
Set fs = CreateObject("Scripting.FileSystemObject")
    StrDrive = "B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
    StrDriveArray = Split(StrDrive, ",")
    For StartPos = 1 To UBound(StrDriveArray)
        Set d = fs.GetDrive(StrDriveArray(StartPos))
        If d.DriveType = 1 Then
            s = d.serialnumber
            Exit For
        End If
    Next
    If s <> "" Then
        MsgBox "U盘序列号:" & s
    Else
        MsgBox "没有找到U盘!"
    End If
End Sub

[此贴子已经被作者于2008-9-10 7:03:23编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 04:41 , Processed in 0.034519 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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