- Offizieller Beitrag
Hi,
mit der Funktion _GetMountedUSB_Drives() lassen sich für alle USB-Sticks (und alle als "removable" angemeldeten USB-Festplatten) Laufwerksbuchstabe und Bezeichnung zurückgeben.
Das steht natürlich nie zusammen in der Registry, sondern kann nur über 3 Abfragen zugeordnet werden ;).
Spoiler anzeigen
;===============================================================================
;
; Function Name: _GetMountedUSB_Drives
; Description:: Ermittelt aktuell gemountete USB-Laufwerke
; Parameter(s): None
; Requirement(s): #include <string.au3>
; Return Value(s): 2D-Array
; Array[0][0] = Anzahl gemounteter USB-Laufwerke
; Array[n][0] = Laufwerk - Buchstabe
; Array[n][1] = Bezeichnung
; Note: Erkennt alle gemounteten USB-Sticks,
; USB-Festplatten werden erkannt, wenn sie als "Wechseldatenträger"
; im System registriert sind.
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;
;===============================================================================
#include <string.au3>
Func _GetMountedUSB_Drives()
Local $aUSB_Drives[1][2]=[[0]]
$var = DriveGetDrive( "Removable" )
For $i = 1 To UBound($var) -1
$reg = RegRead('HKLM\SYSTEM\MountedDevices', '\DosDevices\' & $var[$i])
$val = ''
For $k = 1 To StringLen($reg) - 2 Step 2
$tmp = _HexToString(StringMid($reg, $k, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
$prefix = StringSplit($val, '#')
If StringRight($prefix[3], 2) == 'RM' Then
$prefix = StringTrimRight($prefix[3], 3)
For $l= 1 to 100
$val = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR', $l)
If @error <> 0 then ExitLoop
For $n = 1 To 20
$sub = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val, $n)
If @error <> 0 then ExitLoop
If RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'ParentIdPrefix') == $prefix Then
If DriveGetFileSystem($var[$i] & '\') Then
ReDim $aUSB_Drives[UBound($aUSB_Drives)+1][2]
$aUSB_Drives[0][0] += 1
$aUSB_Drives[UBound($aUSB_Drives)-1][0] = StringUpper($var[$i])
$aUSB_Drives[UBound($aUSB_Drives)-1][1] = _
RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'FriendlyName')
ExitLoop
EndIf
EndIf
Next
Next
EndIf
Next
Return $aUSB_Drives
EndFunc ;_GetMountedUSB_Drives