找回密码
 加入
搜索
查看: 3178|回复: 8

[AU3基础] 如何获取U盘的盘符?

  [复制链接]
发表于 2011-5-5 09:14:35 | 显示全部楼层 |阅读模式
用什么方法能获取U盘所在的盘符?谢谢!
发表于 2011-5-5 09:31:31 | 显示全部楼层
#include <Array.au3>
$sDiskName = DriveGetDrive("REMOVABLE")
_ArrayDisplay($sDiskName)
 楼主| 发表于 2011-5-5 10:00:12 | 显示全部楼层
回复 2# easefull


    能不能逃过A盘,而直接获取U盘的盘符?
发表于 2011-5-5 11:24:19 | 显示全部楼层
本帖最后由 love5173 于 2011-5-5 12:22 编辑

http://www.autoitx.com/forum.php ... 6%B6%AF%C9%E8%B1%B8
自己去看看吧,有帮助的,突然想到了,U盘跟移动硬盘都属于移动设备,应该要区分的,这个正在看P版的SetupApi.au3,暂时不会写
发表于 2011-5-5 12:13:01 | 显示全部楼层
回复 3# 风中柳


    用正则过滤掉
发表于 2011-5-5 12:57:45 | 显示全部楼层
看看AU3所在示例包中的,GUI高级部分,可以直接参考。
发表于 2011-5-5 14:14:50 | 显示全部楼层

#include <winapiex.au3>
;Global Const $WM_DEVICECHANGE = 537 ;设备发生改变
Global Const $DBT_DEVICEARRIVAL = 0x8000 ;设备插入
Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ;设备移除

GUIRegisterMsg($WM_DEVICECHANGE, 'My_Message_Test')

GUICreate("Test", 400, 300)
GUISetState()

Do
Until GUIGetMsg() = -3

Func My_Message_Test($hWnd, $Msg, $wParam, $lParam)        
        Switch $wParam
                Case $DBT_DEVICEARRIVAL
                        Local $_DEV_BROADCAST_HDR = DllStructCreate("int dbch_size; int dbch_devicetype; int dbch_reserved;", $lParam)
                        If DllStructGetData($_DEV_BROADCAST_HDR, "dbch_devicetype") = 2 Then
                                Local Const $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcv_size; int dbcv_devicetype; int dbcv_reserved; int dbcv_unitmask; word dbcv_flags", $lParam)
                                Local Const $unitMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcv_unitmask")
                                $drivers=get_driverflag($unitMask)
                                $GUID = _WinAPI_GetVolumeNameForVolumeMountPoint($drivers & '\')
                                if DriveGetType($drivers&"\")="Removable" then MsgBox(0, '提示!', '检测到设备插入 - ' & $drivers&@crlf&$GUID&@CRLF);移动硬盘是DRIVE_FIXED,U盘是DRIVE_REMOVABLE
                        EndIf
                        
                Case $DBT_DEVICEREMOVECOMPLETE
                        MsgBox(0, '提示!', '检测到设备被移除 - ' & $lParam)
        EndSwitch
EndFunc   ;==>My_Message_Test

Func get_driverflag($unitMask)
        Local $Count = 0
        Local $Pom = Round($unitMask / 2)

        While $Pom > 0
                $Pom = BitShift($Pom, 1)
                $Count += 1
        WEnd

        If $Count >= 1 And $Count <= 26 Then
                Return Chr(65 + $Count) & ":"
        Else
                Return '?'
        EndIf
EndFunc   ;==>get_driverflag

评分

参与人数 2金钱 +20 收起 理由
cq1680 + 10 不错啊。
lllangxx + 10 写的挺好

查看全部评分

发表于 2011-5-6 09:52:47 | 显示全部楼层
只要這個功能不難,關鍵怎麼過濾別的呢?
发表于 2011-5-7 18:35:13 | 显示全部楼层
学习了,mark一下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-14 14:41 , Processed in 0.100401 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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