获取电脑所有盘符的盘符号
- 您所在的用户组无法下载或查看附件
本文由按键学院提供技术支持
今日问题:
想要获取电脑所有盘符下的文件夹名称,而又不知晓使用者电脑里到底有哪些盘符的情况下,该怎么获取电脑现有盘符名呢?
|
|
解决方法:
获取电脑现有盘符名 方法:使用 Api 函数 GetLogicalDrives
函数 | GetLogicalDrives |
函数功能 | [backcolor=rgb(249, 249, 249)]判断系统中存在哪些逻辑驱动器字母 |
函数声明 | Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long |
返回值 | Long,这个结构中的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;位1设为1表示存在B:驱动器;依此类推 |
解析:
1、声明api函数之后,获取返回值:- Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long //声明api函数
- ds = GetLogicalDrives()//获取返回值
复制代码 GetLogicalDrives函数的返回值是长整型,长整型存储范围为32位。 用二进制表示如下: 00000000 00000000 00000000 00000000 ~ 11111111 11111111 11111111 11111111 2、在上面的函数说明表格中,说到GetLogicalDrives 函数是使用二进制来标志电脑上都有哪些盘符。 如果第一位上的数字是 1 那就说明有A盘存在,为 0 则说明没有A盘。如果第二位上的数字是 1,那就说明B盘存在,相反则表示没有B盘。
3、小编的电脑有 C、D、E、F、G 5个盘符, GetLogicalDrives 的返回值是124,二进制表示如下: 00000000 00000000 00000000 01111100 ZY XWVUTSRQ PONM LKJI HGFEDCBA 现在的问题是,它给了我们一个十进制返回值 124 我们要如何通过这个数字得出我们电脑的盘符号呢?
4、首先,我们要知道二进制是如何转换成十进制。二进制数从右往左,第一位如果是1则表示的是 2的0次幂,如果是0忽略不计。第二位如果是1则表示的是2的1次幂,如果是0忽略不计。第三位是2的2次幂,以此类推。我们计算下: 01111100 从右往左 第1位是 0 忽略不计。 第2位是 0 忽略不计。 第3位是 1 ,计算下:2的2次幂,等于4。 第4位是 1 ,计算下:2的3次幂,等于8。 第5位是 1 ,计算下:2的4次幂,等于16。 第6位是 1 ,计算下:2的5次幂,等于32。 第7位是 1 ,计算下:2的6次幂,等于64。 后面的都是0,则忽略不计。 相加的结果是 124,和 GetLogicalDrives 函数返回的十进制值是一样的。
5、接下去要做什么呢?我们需要知道二进制数哪些位置是0哪些位置是1,才能得知我们电脑上现有的盘符名有哪些。那么,是否要把十进制数转换成二进制? 其实,不需要那么繁琐。 我们可以利用与运算,也就是我们熟知的 and。 3 and 4 会返回什么呢? 返回的是0,为什么是0呢? and 运算方法是先把两个数字转换为二进制,然后对比同一位。 如果两个数字都是1,结果就是1,否则结果是0 例如: 3 的二进制值:00000011 4的二进制值: 00000100 - 您所在的用户组无法下载或查看附件
对比结果为0。
6、 了解了与运算是怎么运算之后,后续的操作就简单了。 例如: A盘的二进制值和 124比。(124是小编获取到的GetLogicalDrives 函数返回值,小编电脑有五个盘:CDEFG) A盘十进制值为1 A盘二进制值 00000001 124二进制值 01111100 对比结果是:00000000 说明不存在A盘 那么c盘呢?c盘是存在的,那对比结果应当是1,我们计算下: c盘十进制值为4 C盘二进制值 00000100 124二进制值 01111100 对比结果是:00000100 返回值是1说明c盘存在。 我们就利用这样的与运算,来判断GetLogicalDrives 函数返回值表示的是哪些盘符。
|
代码:
- Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long
- ds = GetLogicalDrives()
- For i = 2 To 26
- If 2 ^ i and ds Then
- TracePrint chr(65+i)
- End If
- Next
-
复制代码 分析: 第一步,声明api函数。
第二步,获取电脑上现有盘符名的十进制返回值。
第三步,循环判断 C~Z 哪些是返回值里存在的盘符
与预算,进行二进制值的对比。
第四步,将符合条件的加上65转换为字符。
注意:for 循环 ,循环到26,这个可以理解,因为有26个字母要进行对比。
可是,为什么for循环是从 2开始呢?
那是 因为A,B盘通常为软盘,所以排除了他们。
本文由按键学院提供技术支持
━═━═━━═━═━━═━═━━═━═━◥◤━═━═━━═━═━━═━═━═━━═━═━
有钱,就是任性!按键学院的导师就是土豪!
按键学院实战班