风中柳 发表于 2011-5-5 09:14:35

如何获取U盘的盘符?

用什么方法能获取U盘所在的盘符?谢谢!

easefull 发表于 2011-5-5 09:31:31

#include <Array.au3>
$sDiskName = DriveGetDrive("REMOVABLE")
_ArrayDisplay($sDiskName)

风中柳 发表于 2011-5-5 10:00:12

回复 2# easefull


    能不能逃过A盘,而直接获取U盘的盘符?

love5173 发表于 2011-5-5 11:24:19

本帖最后由 love5173 于 2011-5-5 12:22 编辑

http://www.autoitx.com/forum.php?mod=viewthread&tid=16718&highlight=%D2%C6%B6%AF%C9%E8%B1%B8
自己去看看吧,有帮助的,突然想到了,U盘跟移动硬盘都属于移动设备,应该要区分的,这个正在看P版的SetupApi.au3,暂时不会写

haijie1223 发表于 2011-5-5 12:13:01

回复 3# 风中柳


    用正则过滤掉

楼上风云 发表于 2011-5-5 12:57:45

看看AU3所在示例包中的,GUI高级部分,可以直接参考。

3mile 发表于 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

zzz867 发表于 2011-5-6 09:52:47

只要這個功能不難,關鍵怎麼過濾別的呢?

wsfda 发表于 2011-5-7 18:35:13

学习了,mark一下
页: [1]
查看完整版本: 如何获取U盘的盘符?