• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201412期】获取电脑所有盘符的盘符号 [复制链接]

1#

获取电脑所有盘符的盘符号

您所在的用户组无法下载或查看附件

本文按键学院提供技术支持



今日问题:

想要获取电脑所有盘符下的文件夹名称,而又不知晓使用者电脑里到底有哪些盘符的情况下,该怎么获取电脑现有盘符名呢?





解决方法:


获取电脑现有盘符名 方法:使用 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函数之后,获取返回值:
  1. Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long //声明api函数
  2. 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 函数返回值表示的是哪些盘符。




代码:
  1. Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long
  2. ds = GetLogicalDrives()
  3. For i = 2 To 26
  4. If 2 ^ i and ds Then
  5. TracePrint chr(65+i)
  6. End If
  7. Next

复制代码
分析
第一步,声明api函数。
第二步,获取电脑上现有盘符名的十进制返回值。
第三步,循环判断 C~Z 哪些是返回值里存在的盘符
与预算,进行二进制值的对比。
第四步,将符合条件的加上65转换为字符。



注意for 循环 ,循环到26,这个可以理解,因为有26个字母要进行对比。
可是,为什么for循环是从 2开始呢?
那是 因为A,B盘通常为软盘,所以排除了他们。
















本文按键学院提供技术支持

━═━═━━═━═━━═━═━━═━═━◥◤━═━═━━═━═━━═━═━═━━═━═━

有钱,就是任性!按键学院的导师就是土豪!

按键学院实战班


    已有2评分我要评分查看所有评分

    本主题由 超级版主 n15976906190 于 2017/9/2 8:41:28 执行 审核主题 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    学习 啊

    3#

    学习学习

    4#


    5#

    】-【201412期】获取电脑所有盘符的盘符号

    6#

    6666666666666666666,应该能解决我的问题

    7#

    1232312321321

    8#

    afsdfsfsfsfasf

    9#

    66666666666666666

    10#

    学习

    11#

    电风扇十多个

    12#

    东方红东方古典风格

    13#


    14#

    66666

    15#

    全部贴出来就好了,才多少

    16#


    17#

    呵呵

    18#


    19#

    慢慢学慢慢来

    20#

    电脑所有盘

    发新话题 回复该主题