Vorhandene Laufwerke nicht anzeigen

  • Hi zusammen,

    ich habe seit knapp einen Jahr mal wieder angefangen was zu schreiben und stehe direkt vor einem Problem, ich will als einstieg ein Script schrieben in dem ich mich mit Netzlaufwerken verbinden kann.
    Hier mal der Code:

    [autoit]

    #include <EditConstants.au3>
    $GUI = GUICreate("NetCon", 400, 130)
    GUICtrlCreateGroup("Connect-User", 10, 10, 180, 80)
    GUICtrlCreateLabel("User:", 14, 27)
    $User = GUICtrlCreateInput("", 65, 25, 120, 20)
    GUICtrlCreateLabel("Password:", 14, 57)
    $PW = GUICtrlCreateInput("", 65, 55, 120, 20, $ES_PASSWORD)
    GUICtrlCreateGroup("Network", 200, 10, 180, 80)
    GUICtrlCreateLabel("Drive:", 205, 27)
    $Drive = GUICtrlCreateInput("", 240, 25, 135, 20)
    GUICtrlCreateLabel("Letter:", 205, 55)
    $Letter = GUICtrlCreateCombo("A:", 240, 55, 135, 20)
    GUICtrlSetData($Letter, "B:|C:|D:|F:|G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:")
    $Start = GUICtrlCreateButton("Connect", 10, 100, 55, 25)
    GUISetState(@SW_SHOW, $GUI)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case -3
    If $nMsg[1] = $GUI Then
    Exit
    Else
    GUISetState(@SW_HIDE, $nMsg[1])
    EndIf
    case $Start
    $USER = GUICtrlRead($User)
    $PASSWORD = GUICtrlRead($PW)
    $DRIVE = GUICtrlRead($Drive)
    $LETTER = GUICtrlRead($Letter)
    Connect()
    EndSwitch
    WEnd

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

    Func Connect()
    Run("NET USE " & $LETTER & " " & $DRIVE & " " & $PASSWORD & " /USER:" & $USER)
    ;;MsgBox(64, "Mount", "Network drive is mounted", 20)
    EndFunc

    [/autoit]

    Nun will ich zwei sachen regeln,
    1. Das die Laufwerksbuchstaben die bereits mit einen Laufwerk verbunden sind nicht angezeigt werden
    2. Das geprüft wird ob das Laufwerk verbunden ist

    ich weiß bzw. denke das ich das ganze mit DriveGetDrive lösen kann, nur komme ich nicht dadrauf wie.

    Schonmal danke für eure Hilfe ;)

  • Moin , also die Freien Laufwerksbuchstaben bekommste hiermit

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $freeDrives[1]
    _GetFreeDriveLetter()
    _ArrayDisplay($freeDrives)

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

    Func _GetFreeDriveLetter()
    For $x = 67 To 90
    If DriveStatus(Chr($x) & ':\') = 'INVALID' Then _ArrayAdd($freeDrives,(chr($x)&':'))
    Next
    EndFunc

    [/autoit]

    und das Laufwerksmapping macht man am besten über

    [autoit]


    DriveMapAdd

    [/autoit]

    EDIT : also so in der Art

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <EditConstants.au3>

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

    Global $freeDrives[1], $freeDrivesString
    Global $user,$pass,$drive
    _GetFreeDriveLetter()

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

    $GUI = GUICreate("NetCon", 400, 130)
    GUICtrlCreateGroup("Connect-User", 10, 10, 180, 80)
    GUICtrlCreateLabel("User:", 14, 27)
    $User = GUICtrlCreateInput("", 65, 25, 120, 20)
    GUICtrlCreateLabel("Password:", 14, 57)
    $PW = GUICtrlCreateInput("", 65, 55, 120, 20, $ES_PASSWORD)
    GUICtrlCreateGroup("Network", 200, 10, 180, 80)
    GUICtrlCreateLabel("Drive:", 205, 27)
    $Drive = GUICtrlCreateInput("", 240, 25, 135, 20)
    GUICtrlCreateLabel("Letter:", 205, 55)
    $Letter = GUICtrlCreateCombo("A:", 240, 55, 135, 20)
    GUICtrlSetData($Letter, $freeDrivesString)
    $Start = GUICtrlCreateButton("Connect", 10, 100, 55, 25)
    GUISetState(@SW_SHOW, $GUI)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case -3
    If $nMsg[1] = $GUI Then
    Exit
    Else
    GUISetState(@SW_HIDE, $nMsg[1])
    EndIf
    case $Start
    $USER = GUICtrlRead($User)
    $PASSWORD = GUICtrlRead($PW)
    $DRIVE = GUICtrlRead($Drive)
    $LETTER = GUICtrlRead($Letter)
    _MapDrive($user,$PASSWORD,$Drive,$LETTER)
    EndSwitch
    WEnd

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

    Func _MapDrive($user,$pass,$drive,$LETTER)
    MsgBox(2,$user &' ' & $pass,$drive & ' ' & $LETTER)
    If DriveMapAdd($LETTER,$drive,0,$user,$pass) = 1 Then
    MsgBox(2,"","Laufwerk Hinzugefügt")
    Else
    MsgBox(2,"","Fehler beim Mapping")
    Endif
    ;Run("NET USE " & $LETTER & " " & $DRIVE & " " & $PASSWORD & " /USER:" & $USER)
    ;;MsgBox(64, "Mount", "Network drive is mounted", 20)
    EndFunc

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

    Func _GetFreeDriveLetter()
    For $x = 67 To 90
    If DriveStatus(Chr($x) & ':\') = 'INVALID' Then _ArrayAdd($freeDrives,(chr($x)&':'))
    Next
    $freeDrivesString = _ArrayToString($freeDrives)
    EndFunc

    [/autoit]

    Gruß Marvin

    Einmal editiert, zuletzt von Protex (8. Dezember 2011 um 10:17)