Hallo,
Ich arbeite an einem Tool, mit dem man ganz einfach ein Laufwerk verbinden kann. Das Tool authenfifiziert sich über das Windows integrierte Authentifizierungs-Fenster.
Das Tool ist sogut wie fertig. Es funktioniert auch alles, solange kein Fehler auftaucht. Genau gesagt:
- wenn ein Pfad aus igendeinem Grund nicht erreichbar ist
- Laufwerksbuchstabe nicht getrennt werden kann, da er schon belegt ist, oder wenn etwa gerade "bussy" ist.
Es wäre super, wenn er bei einem Event $drvCallError diesen rausschreibt und abbricht. Bei einem Fehler friert das Fenster momentan einfach ein.
Danke für die Hilfe!
C
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Dim Const $ilog = @TempDir & "\LWlog.txt"
Dim Const $drvCallError = @error
; Hauptfenster
$maindlg = GUICreate("Laufwerke verbinden", 750, 500)
$eventmng = GUICtrlCreateLabel("", 10, 10+250, 704, 160)
$btn_start = GUICtrlCreateButton("Start", 10, 430, 84, 20)
Dim $aServers[6][5] ; Drive|Server|Kommentar
$aServers[0][0] = 4
$aServers[1][0] = '\\server1\freigabe'
$aServers[2][0] = '\\server2\freigabe'
$aServers[3][0] = '\\server3\freigabe'
$aServers[4][0] = '\\server4\freigabe'
$aServers[1][2] = 'I:'
$aServers[2][2] = 'J:'
$aServers[3][2] = 'K:'
$aServers[4][2] = 'L:'
$aServers[1][3] = 'Standard Laufwerk 1'
$aServers[2][3] = 'Standard Laufwerk 2'
$aServers[3][3] = 'Standard Laufwerk 3'
$aServers[4][3] = 'Standard Laufwerk 4'
$gServers = GUICtrlCreateListView('Drive|Server|Kommentar', 10, 15, 740, 200, Default, BitOR($LVS_EX_CHECKBOXES, $WS_VSCROLL))
_GUICtrlListView_SetColumnWidth($gServers, 1, 200)
_GUICtrlListView_SetColumnWidth($gServers, 2, 360)
For $i = 1 To $aServers[0][0]
$aServers[$i][1] = GUICtrlCreateListViewItem($aServers[$i][2] & '|' & $aServers[$i][0] & '|' & $aServers[$i][3], $gServers)
Next
GUISetState()
Func _laufwerke()
For $i=1 To $aServers[0][0]
If BitAND(GUICtrlRead($aServers[$i][1],1),$GUI_CHECKED) Then
; Output
$iText = "Das Laufwerk " & $aServers[$i][2] & " wird nun getrennt!" & @CRLF & ""
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
$drvcall = DriveMapDel($aServers[$i][2])
Sleep (3000)
; Output
$iText = "Das Laufwerk " & $aServers[$i][2] & " wird verbunden. Bitte warten...." & @CRLF & ""
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
$drvcall = DriveMapAdd($aServers[$i][2], $aServers[$i][0], $DMA_AUTHENTICATION + $DMA_PERSISTENT)
Do
Sleep(5)
Until DriveStatus($aServers[$i][2]) = "READY"
EndIf
Next
If $drvcall = 1 Then
; Output
$iText = "Das Laufwerk " & $aServers[$i][2] & " wurde verbunden." & @CRLF & ""
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
EndIf
; Error Codes
Switch $drvCallError
Case "1"
; Output
$iText = "API Error Code" & @extended
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
Case "2"
; Output
$iText = "access denied Error"
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
Case "3"
; Output
$iText = "Device already mapped"
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
Case "4"
; Output
$iText = "Invalid Device Name"
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
Case "5"
; Output
$iText = "Invalid remote share"
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
Case "6"
; Output
$iText = "Invalid Password"
FileWrite($ilog, $iText)
$_FILE_Open = $ilog
$_FILE_ReadFile = FileRead($_FILE_Open)
GUICtrlSetData($eventmng, $_FILE_ReadFile)
EndSwitch
EndFunc
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Switch $nMsg[1]
Case $maindlg
Exit
Case Else
GUISetState(@SW_SHOW, $maindlg)
GUISetState(@SW_HIDE, $nMsg[1])
GUISwitch($maindlg)
EndSwitch
Case $btn_start;
FileDelete($ilog) ; Output Log wird gelöscht
_laufwerke()
EndSwitch
WEnd
Exit
Alles anzeigen