Laufwerke in Combox einlesen

  • Code


    Hallo zusammen ,

    ich bin neu hier und habe folgendes Problem :

    ich möchte in die verfügbaren Laufwerke eines beliebigen PCs in eine Combobox einlesen für das man Quell- und Ziellaufwerk auswählen kenn.

    in der Anlage sende ich war ich meinen Quellcode .

    ich würde mich freuen wenn mir jemand helfen könnte mein Programm fertigzustellen .

    Gruß Hilko

    Code
    $qdrive = DriveGetDrive("all")If NOT @error Then	For $i = 1 to $qdrive[0]	$drq = StringUpper($qdrive[$i]) & @CRLF	GUICtrlCreateCombo($i, $qdrive, 285, 53, 145, 25)	NextEndIf
  • Also so schwer ist das nicht. Du hattest es schon fast:

    Spoiler anzeigen
    [autoit]

    $idCombo = GUICtrlCreateCombo("", 50, 50, 80, 30)

    [/autoit] [autoit][/autoit] [autoit]

    $aDrives = DriveGetDrive("ALL")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aDrives[0]
    $sDrives &= $aDrives[$i] & "|"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($idCombo, StringTrimRight($sDrives, 1), $aDrives[1])

    [/autoit]


    Gruss Shadoiwgor

  • Hier mit "StringUpper". 8)

    [autoit]


    #include<ComboConstants.au3>
    #include<GUIConstantsEx.au3>

    [/autoit][autoit][/autoit][autoit]

    $Gui = GUICreate('Beispiel', 200, 100)
    GuiCtrlCreateLabel('Bitte Laufwerk auswählen:', 10, 25, 130, 30)
    $Combo = GUICtrlCreateCombo('', 150, 20, 50, 30, $CBS_DROPDOWNLIST)
    $Drives = DriveGetDrive('Fixed')
    $DrivesCombo = ''
    For $i = 1 To $Drives[0]
    $DrivesCombo &= StringUpper($Drives[$i]) & '\|'
    Next
    GUICtrlSetData($Combo, $DrivesCombo, $Drives[1] & '\')

    [/autoit][autoit][/autoit][autoit]

    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    $Drive = GUICtrlRead($Combo)
    ExitLoop
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, '', $Drive)

    [/autoit]
    • Offizieller Beitrag

    Und damit die Combobox auch dann aktualisiert wird, wenn ein Laufwerk entfernt/hinzugefügt wird während Dein Skript bereits läuft:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsDeclared('WM_DEVICECHANGE') Then Global Const $WM_DEVICECHANGE = 0x0219
    $hGui = GUICreate('Automatische Laufwerkserkennung', 300, 200)
    GUICtrlCreateLabel('Alle Laufwerke:', 25, 30, 100, 20)
    $hCombo = GUICtrlCreateCombo('', 20, 50, 120, 20, $CBS_DROPDOWNLIST)
    _ReadDrives()
    GUISetState()
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If $hWnd = $hGui Then _ReadDrives()
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ReadDrives()
    Local $aDrives, $sDrives, $sTmp
    GUICtrlSetData($hCombo, '')
    $aDrives = DriveGetDrive('ALL')
    For $i = 1 To $aDrives[0]
    $sDrives &= '|' & StringUpper($aDrives[$i])
    $sTmp = DriveGetLabel($aDrives[$i])
    If $sTmp <> '' Then $sDrives &= ' (' & $sTmp & ') '
    Next
    GUICtrlSetData($hCombo, StringTrimLeft($sDrives, 1), StringRegExpReplace($sDrives, '\|(.+?)\|.*', '$1'))
    EndFunc

    [/autoit]
  • Hallo,

    wenn du Dateien auf eine CD/DVD brennen willst, kannst du das mit der IMAPI2-UDF machen. Damit kannst du dann auch alle Laufwerke auslesen lassen:

    [autoit]


    #include <IMAPI2.au3>

    [/autoit][autoit][/autoit][autoit]

    $ID = _IMAPI2_DrivesGetID()

    [/autoit][autoit][/autoit][autoit]

    If $ID[0] = 0 Then
    MsgBox(48, "Fehler", "Kein Laufwerk gefunden!")
    ElseIf $ID[0] = 1 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":")
    ElseIf $ID[0] = 2 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[2])) & ":")
    ElseIf $ID[0] = 3 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[2])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[3])) & ":")
    ElseIf $ID[0] = 4 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[2])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[3])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[4])) & ":")
    ElseIf $ID[0] = 5 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[2])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[3])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[4])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[5])) & ":")
    ElseIf $ID[0] = 6 Then
    GuiCtrlSetData($Combo1, _IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[1])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[2])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[3])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[4])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[5])) & ":"&"|"&_IMAPI2_DriveGetLetter(_IMAPI2_DriveGetObj($ID[6])) & ":")
    EndIf

    [/autoit]

    Erklärung:
    In $ID[0] ist die Anzahl der Laufwerke gespeichert.
    _IMAPI2_DriveGetLetter ermittelt den Laufwerksbuchstaben ("E:\", "D:\",...), dafür benötigt man dann noch _IMAPI2_DriveGetObj
    Alle Buchstaben mit einem ":" (,da _IMAPI2_DriveGetLetter nur z.B. "E" zurückgibt) werden in eine Combobox geschrieben ($Combo1)


    Die IMAPI2.au3 ist im Anhang!

    Ich hoffe ich konnte helfen!

    LG K.K.