Buttons nach Aufruf aus SystemTray gehen nicht mehr

  • Hallo,

    ich habe folgendes Problem:

    Ich habe eine Gui geschrieben mit 2 Buttons (Erstellen & Abbrechen).
    Wenn ich auf minimieren oder schliessen oder auf den Abbrechen-Button gehe dann wird die Gui in den System-Tray minimiert.

    Spoiler anzeigen
    Code
    WinSetState($mainGui, "", @SW_HIDE)

    Durch einen Klick auf das System-Tray-Icon wird das Fenster wieder hergestellt.

    Spoiler anzeigen
    Code
    WinSetState($mainGui, "", @SW_Show)
    WinActivate($mainGui, "")

    Hiernach funktionieren (reagieren) jedoch die beiden Buttons nicht mehr. Diese habe ich per GuiCtrlSetOnEvent mit einer Funktion verbunden.

    Spoiler anzeigen
    Code
    $erstellen = GUICtrlCreateButton("&Erstellen", 10, 200, 75, 25, 0)
    GUICtrlSetOnEvent($erstellen, "LwVerbinden")
    $abbruch = GUICtrlCreateButton("&Abbruch", 170, 200, 75, 25, 0)
    GUICtrlSetOnEvent($abbruch, "guiVerstecken")

    Der Aufruf der Buttons funktioniert auch solange ich das Fenster noch nicht minimiert habe.

    Wer das Skript mal testen möchte:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.2.0
    Author: Michael Mangelsdorff

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

    Script Function:
    Verbindet Netzlaufwerke.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #Include <Constants.au3>
    #include <GUIConstants.au3>
    #Include<Array.au3>

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

    ; Change to OnEvent mode
    Opt("GUIOnEventMode", 1)
    Opt("GUIResizeMode", 1)

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

    Opt("TrayOnEventMode",1)
    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",1)

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

    Opt("OnExitFunc", "endscript")

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

    ;*********************************************************************************
    ;*** Beginn: Modus (Test oder kein Test) aus ini.Datei lesen
    ;*********************************************************************************
    dim $modus
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "testmodus", "false")) then
    $modus = 0 ; TEST
    Else
    $modus = 1 ; kein Test
    EndIf
    Else
    $modus = 1 ; kein Test
    ;$modus = 0 ; Test
    EndIf
    ;*********************************************************************************
    ;*** Ende: Modus (Test oder kein Test) aus ini.Datei lesen
    ;*********************************************************************************

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

    ;*********************************************************************************
    ;*** Beginn: Test ob korrekter PC-Name und User
    ;*********************************************************************************
    ;MsgBox(0, "Computername", "ComputerName: " & @ComputerName)
    if not (StringTrimLeft(@ComputerName, 11) = "CompName") Then
    MsgBox(0, "Falscher Computer", "Falscher Computer. Programm wird beendet.")
    if $modus = 1 then Exit
    EndIf

    ;MsgBox(0, "Username", "Username: " & @Username)
    if not (StringTrimLeft(@UserName, 8) = "UserName") Then
    MsgBox(0, "Falscher User", "Falscher User. Programm wird beendet.")
    if $modus = 1 then Exit
    EndIf
    ;*********************************************************************************
    ;*** Ende: Test ob korrekter PC-Name und User
    ;*********************************************************************************

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

    ;*********************************************************************************
    ;*** Beginn: persistent-modus aus ini.Datei lesen
    ;*********************************************************************************
    dim $persistentModus
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "persistent", "false")) = "true" then
    $persistentModus = 1 ; sichtbar
    Else
    $persistentModus = 0 ; nicht sichtbar
    EndIf
    Else
    $persistentModus = 0 ; nicht sichtbar
    EndIf
    ;*********************************************************************************
    ;*** Ende: persistent-modus aus ini.Datei lesen
    ;*********************************************************************************

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

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ANFANG>>
    ;*********************************************************************************************************************************************
    TraySetIcon("Main.ico")

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

    TraySetClick(8) ; nur bei Rechtsklick wird das Menü angezeigt
    TraySetOnEvent(-7, "guiAnzeigen") ; bei Linksklick wird die Gui gezeigt

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

    $tmGUI1 = TrayCreateMenu("Menü: Grafische Oberfläche (GUI)")
    $tmg1 = TrayCreateItem("GUI Anzeigen", $tmGUI1)
    TrayItemSetOnEvent($tmg1, "guiAnzeigen")

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

    TrayCreateItem("")
    $tmGUI2 = TrayCreateMenu("Menü: Programm beenden")
    $tmg2 = TrayCreateItem("Programm beenden", $tmGUI2)
    TrayItemSetOnEvent($tmg2, "programExit")

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

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ENDE>>
    ;*********************************************************************************************************************************************

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

    ;*********************************************************************************
    ;*** Beginn: Erstellung der GUI
    ;*********************************************************************************
    $err = 0

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

    ;GUICreate("Netzlaufwerk", 400, 250, 192, 125)
    dim $mainGUI
    $mainGUI = GUICreate("Netzlaufwerk", 600, 250)
    GUISetIcon ("Main.ico")
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mainGUI)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mainGUI)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mainGUI)
    ;WinSetTrans("Netzlaufwerk", "", 220)
    ;WinSetOnTop("Netzlaufwerk", "", 1)

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

    ;Menü erstellen
    $menuHilfe = GUICtrlCreateMenu ("?")
    $menuHilfeAbout = GUICtrlCreateMenuitem("Über diese Software", $menuHilfe)
    GUICtrlSetOnEvent($menuHilfeAbout, "about")

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

    $erstellen = GUICtrlCreateButton("&Erstellen", 10, 200, 75, 25, 0)
    GUICtrlSetOnEvent($erstellen, "LwVerbinden")

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

    ;$trennen = GUICtrlCreateButton("&Trennen", 90, 200, 75, 25, 0)

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

    $abbruch = GUICtrlCreateButton("&Abbruch", 170, 200, 75, 25, 0)
    GUICtrlSetOnEvent($abbruch, "guiVerstecken")

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

    $pfad = GUICtrlCreateCombo("", 110, 14, 450, 120)

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

    dim $mappingArray[1]
    ;*********************************************************************************
    ;*** Beginn: Einlesen der Netzlaufwerke aus .ini-Datei und Standard-Pfade
    ;*********************************************************************************
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    dim $sectionNetzlaufwerke
    $sectionNetzlaufwerke = IniReadSection(@ScriptDir & "\Netzlaufwerke.ini", "Netzlaufwerke")

    for $i = 1 to ($sectionNetzlaufwerke[0][0]) ; in $sectionNetzlaufwerke[0][0] ist die größe des Arrays gespeichert
    ;MsgBox(0, "Map", "Map: " & $sectionNetzlaufwerke[$i][1])
    ;GUICtrlSetData($pfad, $sectionNetzlaufwerke[$i][1])
    _ArrayAdd ($mappingArray, $sectionNetzlaufwerke[$i][1])
    Next
    EndIf

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

    ; --> Standard-Pfade -->
    _ArrayAdd ($mappingArray, "\\Server\FG_01")
    _ArrayAdd ($mappingArray, "\\Server\FG_02")
    _ArrayAdd ($mappingArray, "\\Server\FG_03")
    _ArrayAdd ($mappingArray, "\\Server\FG_04")
    _ArrayAdd ($mappingArray, "\\Server\FG_05")
    _ArrayAdd ($mappingArray, "\\Server\PublicStore")
    _ArrayAdd ($mappingArray, "\\Server\Austausch1")
    _ArrayAdd ($mappingArray, "\\Server\Projekte1")
    _ArrayAdd ($mappingArray, "\\Server\Projekte2")
    _ArrayAdd ($mappingArray, "\\Server\Austausch2")

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

    _ArrayDelete($mappingArray, 0)

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

    _ArraySort($mappingArray)
    ;_ArrayDisplay($mappingArray, "Array")

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

    for $i = 0 to UBound($mappingArray, 1) -1
    GUICtrlSetData($pfad, $mappingArray[$i])
    Next
    ;*********************************************************************************
    ;*** Ende: Einlesen der Netzlaufwerke aus .ini-Datei und Standard-Pfade
    ;*********************************************************************************

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

    $lwname = GUICtrlCreateCombo("", 110, 44, 75, 120)
    LaufwerksComboBoxFuellen()

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

    $persistent = GUICtrlCreateCheckbox("fest", 195, 44)
    if $persistentModus = 1 Then
    GUICtrlSetState($persistent, $GUI_SHOW)
    Else
    GUICtrlSetState($persistent, $GUI_HIDE)
    EndIf

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

    $domain = GUICtrlCreateInput("DEEUSEW", 110, 74, 131, 21)
    GUICtrlSetState($domain, $GUI_DISABLE)

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

    $benutzer = GUICtrlCreateInput("User-ID", 110, 104, 131, 21)
    $pwd = GUICtrlCreateInput("Passwort", 110, 134, 131, 21, $ES_PASSWORD)

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

    GUICtrlCreateLabel("Pfad zur Freigabe:", 10, 14, 90, 13)
    GUICtrlCreateLabel("Netzlaufwerkname:", 10, 44, 90, 13)
    GUICtrlCreateLabel("Domainname:", 10, 74, 90, 13)
    GUICtrlCreateLabel("Benutzername:", 10, 104, 90, 13)
    GUICtrlCreateLabel("Passwort:", 10, 134, 90, 13)

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

    ;*********************************************************************************
    ;*** Beginn: persistent-default aus ini.Datei lesen
    ;*********************************************************************************
    dim $driveMapMode
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "persistentdefault", "false") = "true") then
    $driveMapMode = 1 ; persistent
    GUICtrlSetState($persistent, $GUI_CHECKED)
    Else
    $driveMapMode = 0 ; non-persistent
    GUICtrlSetState($persistent, $GUI_UNCHECKED)
    EndIf
    Else
    $persistentModus = 0 ; non-persistent
    GUICtrlSetState($persistent, $GUI_UNCHECKED)
    EndIf
    ;*********************************************************************************
    ;*** Ende: persistent-default aus ini.Datei lesen
    ;*********************************************************************************

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

    GUISetState()

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

    ;*********************************************************************************
    ;*** Ende: Erstellung der GUI
    ;*********************************************************************************

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

    While 1
    Sleep(10)
    WEnd

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

    ;*********************************************************************************
    ;*** Beginn: Funktionen
    ;*********************************************************************************

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

    Func LwVerbinden()

    if GUICtrlRead($lwname) = "" Then
    MsgBox(0, "Kein Laufwerksname angegeben !", "Bitte geben Sie einen Laufwerksnamen an !")
    Return 0
    EndIf

    if GUICtrlRead($benutzer) = "" or GUICtrlRead($benutzer) = "User-ID" Then
    MsgBox(0, "Kein Benutzer angegeben !", "Bitte geben Sie einen Benutzernamen (User-ID) an !")
    Return 0
    EndIf

    if GUICtrlRead($domain) = "" Then
    MsgBox(0, "Keine Domäne angegeben !", "Bitte geben Sie eine Domäne (DEEUSEW) an !")
    Return 0
    EndIf

    if GUICtrlRead($pwd) = "" or GUICtrlRead($pwd) = "Passwort" Then
    MsgBox(0, "Kein Passwort angegeben !", "Bitte geben Sie ein Passwort an !")
    Return 0
    EndIf

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

    SplashTextOn("","Bitte Warten...",120,20,-1,-1,1)

    if $persistentModus = 1 Then
    dim $chkboxState = GUICtrlRead($persistent)
    if BitAND(GUICtrlRead($persistent), $GUI_CHECKED) Then
    $driveMapMode = 1 ;persistent
    ElseIf BitAND(GUICtrlRead($persistent), $GUI_UNCHECKED) Then
    $driveMapMode = 0 ;non-persistent
    Else
    MsgBox(0, "Fehler bei CheckBox-Auswertung", "Fehler bei CheckBox-Auswertung, bitte IT2.1 informieren")
    EndIf
    Else
    $driveMapMode = 0 ;non-persistent
    EndIf

    ;Test der Korrektheit des Pfades prüfen (z.B. vorne 2x "\\")
    if not (StringInStr(GUICtrlRead($pfad), "\\") = 1) Then
    SplashOff()
    MsgBox(0, "Falscher Netzwerkpfad", "Der Netzwerkpfad << " & GUICtrlRead($pfad) & " >> ist Fehlerhaft. Er muss mit \\ beginnen.")
    Return
    EndIf

    $map = DriveMapAdd(GUICtrlRead($lwname), GUICtrlRead($pfad),$driveMapMode,GUICtrlRead($domain)&"\"&GUICtrlRead($benutzer), GUICtrlRead($pwd))
    If @error Then $err = @error

    Sleep(1000)

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

    If $err <> 0 Then
    Switch $err
    case 1
    ; $err leeren
    $err = ""
    SetError (0)

    ; Versuch das Laufwerk über IP-Adresse anzusprechen
    dim $doubleSlash = ""
    dim $serverPath = GUICtrlRead($pfad)
    $doubleSlash = StringInStr($serverPath, "\\")

    ;MsgBox(0, "DoubleSlashPosition", $doubleSlash)
    if $doubleSlash = 1 Then
    dim $slash = ""
    dim $ip = ""

    $slash = StringInStr($serverPath, "\", 0 , 3)
    $server = StringMid($serverPath, 3, $slash-3)

    ;MsgBox(0, "Servername", $server)

    TCPStartup()
    $ip = TCPNameToIP($server)
    TCPShutdown()

    if $ip = "" Then
    SplashOff()
    MsgBox(0, "Server existiert nicht", "Der Server " & $server & " existiert nicht oder ist nicht zu erreichen.")
    Return
    EndIf

    ;MsgBox(0, "Server-IP", $ip)

    $serverPath = StringReplace($serverPath, $server, $ip)

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

    ;MsgBox(0, "IP-String", $serverPath)

    $map = DriveMapAdd(GUICtrlRead($lwname), $serverPath,$driveMapMode,GUICtrlRead($domain)&"\"&GUICtrlRead($benutzer), GUICtrlRead($pwd))
    If @error Then
    $err = @error
    SplashOff()
    MsgBox(16,"","Undefiniert / anderer Fehler." & @CRLF & "Fehler: " & @extended)
    Else
    SplashOff()
    MsgBox(0,"Netzlaufwerk", GUICtrlRead($lwname) & " wurde erfolgreich mit " & DriveMapGet(GUICtrlRead($lwname)) & " verbunden.")
    EndIf
    EndIf
    case 2
    SplashOff()
    MsgBox(16,"","Zugriff zum Remote Share verweigert.")
    case 3
    SplashOff()
    MsgBox(16,"","Das Gerät wurde bereits zugewiesen.")
    case 4
    SplashOff()
    MsgBox(16,"","Ungültiger Gerätename.")
    case 5
    SplashOff()
    MsgBox(16,"","Ungültiger Remote Share.")
    case 6
    SplashOff()
    MsgBox(16,"","Ungültiges Passwort.")
    case else
    SplashOff()
    MsgBox(16,"","Unbekannter Fehler.")
    EndSwitch
    Else
    MsgBox(0,"Netzlaufwerk", GUICtrlRead($lwname) & " wurde erfolgreich mit " & DriveMapGet(GUICtrlRead($lwname)) & " verbunden.")
    EndIf

    ;Laufwerks-Combobox neu füllen
    LaufwerksComboBoxFuellen()
    EndFunc

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

    Func LaufwerksComboBoxFuellen()
    ;Liste leeren
    GUICtrlSetData($lwname, "")

    ;Laufwerksbuchstaben holen
    dim $alleBenutztenLaufwerke
    dim $anzLaufwerke
    dim $i = 0

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

    dim $moeglicheLaufwerke[26]
    $moeglicheLaufwerke[0] = "a:"
    $moeglicheLaufwerke[1] = "b:"
    $moeglicheLaufwerke[2] = "c:"
    $moeglicheLaufwerke[3] = "d:"
    $moeglicheLaufwerke[4] = "e:"
    $moeglicheLaufwerke[5] = "f:"
    $moeglicheLaufwerke[6] = "g:"
    $moeglicheLaufwerke[7] = "h:"
    $moeglicheLaufwerke[8] = "i:"
    $moeglicheLaufwerke[9] = "j:"
    $moeglicheLaufwerke[10] = "k:"
    $moeglicheLaufwerke[11] = "l:"
    $moeglicheLaufwerke[12] = "m:"
    $moeglicheLaufwerke[13] = "n:"
    $moeglicheLaufwerke[14] = "o:"
    $moeglicheLaufwerke[15] = "p:"
    $moeglicheLaufwerke[16] = "q:"
    $moeglicheLaufwerke[17] = "r:"
    $moeglicheLaufwerke[18] = "s:"
    $moeglicheLaufwerke[19] = "t:"
    $moeglicheLaufwerke[20] = "u:"
    $moeglicheLaufwerke[21] = "v:"
    $moeglicheLaufwerke[22] = "w:"
    $moeglicheLaufwerke[23] = "x:"
    $moeglicheLaufwerke[24] = "y:"
    $moeglicheLaufwerke[25] = "z:"

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

    $alleBenutztenLaufwerke = DriveGetDrive("ALL")

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

    for $i = 0 to 25
    if _ArraySearch($alleBenutztenLaufwerke, $moeglicheLaufwerke[$i]) < 0 Then
    GUICtrlSetData($lwname, $moeglicheLaufwerke[$i])
    EndIf
    next
    EndFunc

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

    Func guiAnzeigen()
    ;WinSetState($mainGui, "", @SW_RESTORE)
    WinSetState($mainGui, "", @SW_Show)
    WinActivate($mainGui, "")
    EndFunc

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

    Func guiVerstecken()
    ;GUISetState(@SW_HIDE, $mainGui)
    WinSetState($mainGui, "", @SW_HIDE)
    EndFunc

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

    Func SpecialEvents()
    ;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
    Select
    Case @GUI_CTRLID = $GUI_EVENT_CLOSE
    ;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    guiVerstecken()
    Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
    ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    guiVerstecken()
    Case @GUI_CTRLID = $GUI_EVENT_RESTORE
    ;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    EndSelect
    EndFunc

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

    Func endscript()
    Switch @exitMethod
    Case 0
    ;WriteLog("Script beendet durch <<" & "Natural Closing>>")
    Case 1
    ;WriteLog("Script beendet durch <<" & "Close by Exit function>>")
    Case 2
    ;WriteLog("Script beendet durch <<" & "Close by clicking on exit of the systray>>")
    Case 3
    ;WriteLog("Script beendet durch <<" & "Close by user logoff>>")
    Case 4
    ;WriteLog("Script beendet durch <<" & "Close by Windows shutdown>>")
    EndSwitch
    EndFunc

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

    Func programExit()
    ;WriteLog("Beginn programExit()")
    exit
    EndFunc

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

    Func about()
    MsgBox(0, "About", "Programmiert von Michael Mangelsdorff, IT2.1")
    EndFunc

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

    ;*********************************************************************************
    ;*** Ende: Funktionen
    ;*********************************************************************************

    [/autoit]

    Damit der Test läuft müßt ihr noch eine (Netzlaufwerke.ini) ini-Datei anlegen wie folgt:

    Spoiler anzeigen

    Hat jemand Ähnliche Erfahrungen oder bereits ein Programm was in SystemTray minimiert und anschliessend wiederhergestellt wird ?

    Und bitte möglichst per SetOnEvent ... weil diese Programmierart am nähesten an den meisten Programmiersprachen liegt (also keine Schleife programmieren wo Msg abgefragt wird, sondern Event-Trigger).

    Vielen Dank (auch wenn ich nicht glaube das mir jemand helfen kann :)

    • Offizieller Beitrag

    Hi,

    ich habe das Programm so getestet und es funktioniert einwandfrei.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.2.0
    Author: Michael Mangelsdorff

    Script Function:
    Verbindet Netzlaufwerke.

    #ce ----------------------------------------------------------------------------

    ; Script Start - Add your code below here

    #Include <Constants.au3>
    #include <GUIConstants.au3>
    #Include<Array.au3>

    ; Change to OnEvent mode
    Opt("GUIOnEventMode", 1)
    Opt("GUIResizeMode", 1)

    Opt("TrayOnEventMode",1)
    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",1)

    Opt("OnExitFunc", "endscript")

    ;*********************************************************************************
    ;*** Beginn: Modus (Test oder kein Test) aus ini.Datei lesen
    ;*********************************************************************************
    dim $modus
    #cs
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "testmodus", "false")) then
    $modus = 0 ; TEST
    Else
    $modus = 1 ; kein Test
    EndIf
    Else
    $modus = 1 ; kein Test
    ;$modus = 0 ; Test
    EndIf
    #ce
    ;*********************************************************************************
    ;*** Ende: Modus (Test oder kein Test) aus ini.Datei lesen
    ;*********************************************************************************

    ;*********************************************************************************
    ;*** Beginn: Test ob korrekter PC-Name und User
    ;*********************************************************************************
    ;MsgBox(0, "Computername", "ComputerName: " & @ComputerName)
    if not (StringTrimLeft(@ComputerName, 11) = "CompName") Then
    MsgBox(0, "Falscher Computer", "Falscher Computer. Programm wird beendet.")
    if $modus = 1 then Exit
    EndIf

    ;MsgBox(0, "Username", "Username: " & @Username)
    if not (StringTrimLeft(@UserName, 8) = "UserName") Then
    MsgBox(0, "Falscher User", "Falscher User. Programm wird beendet.")
    if $modus = 1 then Exit
    EndIf
    ;*********************************************************************************
    ;*** Ende: Test ob korrekter PC-Name und User
    ;*********************************************************************************

    ;*********************************************************************************
    ;*** Beginn: persistent-modus aus ini.Datei lesen
    ;*********************************************************************************
    dim $persistentModus
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "persistent", "false")) = "true" then
    $persistentModus = 1 ; sichtbar
    Else
    $persistentModus = 0 ; nicht sichtbar
    EndIf
    Else
    $persistentModus = 0 ; nicht sichtbar
    EndIf
    ;*********************************************************************************
    ;*** Ende: persistent-modus aus ini.Datei lesen
    ;*********************************************************************************

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ANFANG>>
    ;*********************************************************************************************************************************************
    TraySetIcon("Main.ico")

    TraySetClick(8) ; nur bei Rechtsklick wird das Menü angezeigt
    TraySetOnEvent(-7, "guiAnzeigen") ; bei Linksklick wird die Gui gezeigt

    $tmGUI1 = TrayCreateMenu("Menü: Grafische Oberfläche (GUI)")
    $tmg1 = TrayCreateItem("GUI Anzeigen", $tmGUI1)
    TrayItemSetOnEvent($tmg1, "guiAnzeigen")

    TrayCreateItem("")
    $tmGUI2 = TrayCreateMenu("Menü: Programm beenden")
    $tmg2 = TrayCreateItem("Programm beenden", $tmGUI2)
    TrayItemSetOnEvent($tmg2, "programExit")

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ENDE>>
    ;*********************************************************************************************************************************************

    ;*********************************************************************************
    ;*** Beginn: Erstellung der GUI
    ;*********************************************************************************
    $err = 0

    ;GUICreate("Netzlaufwerk", 400, 250, 192, 125)
    dim $mainGUI
    $mainGUI = GUICreate("Netzlaufwerk", 600, 250)
    GUISetIcon ("Main.ico")
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mainGUI)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mainGUI)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mainGUI)
    ;WinSetTrans("Netzlaufwerk", "", 220)
    ;WinSetOnTop("Netzlaufwerk", "", 1)

    ;Menü erstellen
    $menuHilfe = GUICtrlCreateMenu ("?")
    $menuHilfeAbout = GUICtrlCreateMenuitem("Über diese Software", $menuHilfe)
    GUICtrlSetOnEvent($menuHilfeAbout, "about")

    $erstellen = GUICtrlCreateButton("&Erstellen", 10, 200, 75, 25, 0)
    GUICtrlSetOnEvent($erstellen, "LwVerbinden")

    ;$trennen = GUICtrlCreateButton("&Trennen", 90, 200, 75, 25, 0)

    $abbruch = GUICtrlCreateButton("&Abbruch", 170, 200, 75, 25, 0)
    GUICtrlSetOnEvent($abbruch, "guiVerstecken")

    $pfad = GUICtrlCreateCombo("", 110, 14, 450, 120)

    dim $mappingArray[1]
    ;*********************************************************************************
    ;*** Beginn: Einlesen der Netzlaufwerke aus .ini-Datei und Standard-Pfade
    ;*********************************************************************************
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    dim $sectionNetzlaufwerke
    $sectionNetzlaufwerke = IniReadSection(@ScriptDir & "\Netzlaufwerke.ini", "Netzlaufwerke")

    for $i = 1 to ($sectionNetzlaufwerke[0][0]) ; in $sectionNetzlaufwerke[0][0] ist die größe des Arrays gespeichert
    ;MsgBox(0, "Map", "Map: " & $sectionNetzlaufwerke[$i][1])
    ;GUICtrlSetData($pfad, $sectionNetzlaufwerke[$i][1])
    _ArrayAdd ($mappingArray, $sectionNetzlaufwerke[$i][1])
    Next
    EndIf

    ; --> Standard-Pfade -->
    _ArrayAdd ($mappingArray, "\\Server\FG_01")
    _ArrayAdd ($mappingArray, "\\Server\FG_02")
    _ArrayAdd ($mappingArray, "\\Server\FG_03")
    _ArrayAdd ($mappingArray, "\\Server\FG_04")
    _ArrayAdd ($mappingArray, "\\Server\FG_05")
    _ArrayAdd ($mappingArray, "\\Server\PublicStore")
    _ArrayAdd ($mappingArray, "\\Server\Austausch1")
    _ArrayAdd ($mappingArray, "\\Server\Projekte1")
    _ArrayAdd ($mappingArray, "\\Server\Projekte2")
    _ArrayAdd ($mappingArray, "\\Server\Austausch2")

    _ArrayDelete($mappingArray, 0)

    _ArraySort($mappingArray)
    ;_ArrayDisplay($mappingArray, "Array")

    for $i = 0 to UBound($mappingArray, 1) -1
    GUICtrlSetData($pfad, $mappingArray[$i])
    Next
    ;*********************************************************************************
    ;*** Ende: Einlesen der Netzlaufwerke aus .ini-Datei und Standard-Pfade
    ;*********************************************************************************

    $lwname = GUICtrlCreateCombo("", 110, 44, 75, 120)
    LaufwerksComboBoxFuellen()

    $persistent = GUICtrlCreateCheckbox("fest", 195, 44)
    if $persistentModus = 1 Then
    GUICtrlSetState($persistent, $GUI_SHOW)
    Else
    GUICtrlSetState($persistent, $GUI_HIDE)
    EndIf

    $domain = GUICtrlCreateInput("DEEUSEW", 110, 74, 131, 21)
    GUICtrlSetState($domain, $GUI_DISABLE)

    $benutzer = GUICtrlCreateInput("User-ID", 110, 104, 131, 21)
    $pwd = GUICtrlCreateInput("Passwort", 110, 134, 131, 21, $ES_PASSWORD)

    GUICtrlCreateLabel("Pfad zur Freigabe:", 10, 14, 90, 13)
    GUICtrlCreateLabel("Netzlaufwerkname:", 10, 44, 90, 13)
    GUICtrlCreateLabel("Domainname:", 10, 74, 90, 13)
    GUICtrlCreateLabel("Benutzername:", 10, 104, 90, 13)
    GUICtrlCreateLabel("Passwort:", 10, 134, 90, 13)

    ;*********************************************************************************
    ;*** Beginn: persistent-default aus ini.Datei lesen
    ;*********************************************************************************
    dim $driveMapMode
    if FileExists(@ScriptDir & "\Netzlaufwerke.ini") Then
    if (IniRead(@ScriptDir & "\Netzlaufwerke.ini", "StartParameter", "persistentdefault", "false") = "true") then
    $driveMapMode = 1 ; persistent
    GUICtrlSetState($persistent, $GUI_CHECKED)
    Else
    $driveMapMode = 0 ; non-persistent
    GUICtrlSetState($persistent, $GUI_UNCHECKED)
    EndIf
    Else
    $persistentModus = 0 ; non-persistent
    GUICtrlSetState($persistent, $GUI_UNCHECKED)
    EndIf
    ;*********************************************************************************
    ;*** Ende: persistent-default aus ini.Datei lesen
    ;*********************************************************************************

    GUISetState()

    ;*********************************************************************************
    ;*** Ende: Erstellung der GUI
    ;*********************************************************************************


    While 1
    Sleep(10)
    WEnd

    ;*********************************************************************************
    ;*** Beginn: Funktionen
    ;*********************************************************************************

    Func LwVerbinden()

    if GUICtrlRead($lwname) = "" Then
    MsgBox(0, "Kein Laufwerksname angegeben !", "Bitte geben Sie einen Laufwerksnamen an !")
    Return 0
    EndIf

    if GUICtrlRead($benutzer) = "" or GUICtrlRead($benutzer) = "User-ID" Then
    MsgBox(0, "Kein Benutzer angegeben !", "Bitte geben Sie einen Benutzernamen (User-ID) an !")
    Return 0
    EndIf

    if GUICtrlRead($domain) = "" Then
    MsgBox(0, "Keine Domäne angegeben !", "Bitte geben Sie eine Domäne (DEEUSEW) an !")
    Return 0
    EndIf

    if GUICtrlRead($pwd) = "" or GUICtrlRead($pwd) = "Passwort" Then
    MsgBox(0, "Kein Passwort angegeben !", "Bitte geben Sie ein Passwort an !")
    Return 0
    EndIf

    SplashTextOn("","Bitte Warten...",120,20,-1,-1,1)

    if $persistentModus = 1 Then
    dim $chkboxState = GUICtrlRead($persistent)
    if BitAND(GUICtrlRead($persistent), $GUI_CHECKED) Then
    $driveMapMode = 1 ;persistent
    ElseIf BitAND(GUICtrlRead($persistent), $GUI_UNCHECKED) Then
    $driveMapMode = 0 ;non-persistent
    Else
    MsgBox(0, "Fehler bei CheckBox-Auswertung", "Fehler bei CheckBox-Auswertung, bitte IT2.1 informieren")
    EndIf
    Else
    $driveMapMode = 0 ;non-persistent
    EndIf

    ;Test der Korrektheit des Pfades prüfen (z.B. vorne 2x "\\")
    if not (StringInStr(GUICtrlRead($pfad), "\\") = 1) Then
    SplashOff()
    MsgBox(0, "Falscher Netzwerkpfad", "Der Netzwerkpfad << " & GUICtrlRead($pfad) & " >> ist Fehlerhaft. Er muss mit \\ beginnen.")
    Return
    EndIf

    $map = DriveMapAdd(GUICtrlRead($lwname), GUICtrlRead($pfad),$driveMapMode,GUICtrlRead($domain)&"\"&GUICtrlRead($benutzer), GUICtrlRead($pwd))
    If @error Then $err = @error

    Sleep(1000)

    If $err <> 0 Then
    Switch $err
    case 1
    ; $err leeren
    $err = ""
    SetError (0)

    ; Versuch das Laufwerk über IP-Adresse anzusprechen
    dim $doubleSlash = ""
    dim $serverPath = GUICtrlRead($pfad)
    $doubleSlash = StringInStr($serverPath, "\\")

    ;MsgBox(0, "DoubleSlashPosition", $doubleSlash)
    if $doubleSlash = 1 Then
    dim $slash = ""
    dim $ip = ""

    $slash = StringInStr($serverPath, "\", 0 , 3)
    $server = StringMid($serverPath, 3, $slash-3)

    ;MsgBox(0, "Servername", $server)

    TCPStartup()
    $ip = TCPNameToIP($server)
    TCPShutdown()

    if $ip = "" Then
    SplashOff()
    MsgBox(0, "Server existiert nicht", "Der Server " & $server & " existiert nicht oder ist nicht zu erreichen.")
    Return
    EndIf

    ;MsgBox(0, "Server-IP", $ip)

    $serverPath = StringReplace($serverPath, $server, $ip)

    ;MsgBox(0, "IP-String", $serverPath)

    $map = DriveMapAdd(GUICtrlRead($lwname), $serverPath,$driveMapMode,GUICtrlRead($domain)&"\"&GUICtrlRead($benutzer), GUICtrlRead($pwd))
    If @error Then
    $err = @error
    SplashOff()
    MsgBox(16,"","Undefiniert / anderer Fehler." & @CRLF & "Fehler: " & @extended)
    Else
    SplashOff()
    MsgBox(0,"Netzlaufwerk", GUICtrlRead($lwname) & " wurde erfolgreich mit " & DriveMapGet(GUICtrlRead($lwname)) & " verbunden.")
    EndIf
    EndIf
    case 2
    SplashOff()
    MsgBox(16,"","Zugriff zum Remote Share verweigert.")
    case 3
    SplashOff()
    MsgBox(16,"","Das Gerät wurde bereits zugewiesen.")
    case 4
    SplashOff()
    MsgBox(16,"","Ungültiger Gerätename.")
    case 5
    SplashOff()
    MsgBox(16,"","Ungültiger Remote Share.")
    case 6
    SplashOff()
    MsgBox(16,"","Ungültiges Passwort.")
    case else
    SplashOff()
    MsgBox(16,"","Unbekannter Fehler.")
    EndSwitch
    Else
    MsgBox(0,"Netzlaufwerk", GUICtrlRead($lwname) & " wurde erfolgreich mit " & DriveMapGet(GUICtrlRead($lwname)) & " verbunden.")
    EndIf

    ;Laufwerks-Combobox neu füllen
    LaufwerksComboBoxFuellen()
    EndFunc

    Func LaufwerksComboBoxFuellen()
    ;Liste leeren
    GUICtrlSetData($lwname, "")

    ;Laufwerksbuchstaben holen
    dim $alleBenutztenLaufwerke
    dim $anzLaufwerke
    dim $i = 0

    dim $moeglicheLaufwerke[26]
    $moeglicheLaufwerke[0] = "a:"
    $moeglicheLaufwerke[1] = "b:"
    $moeglicheLaufwerke[2] = "c:"
    $moeglicheLaufwerke[3] = "d:"
    $moeglicheLaufwerke[4] = "e:"
    $moeglicheLaufwerke[5] = "f:"
    $moeglicheLaufwerke[6] = "g:"
    $moeglicheLaufwerke[7] = "h:"
    $moeglicheLaufwerke[8] = "i:"
    $moeglicheLaufwerke[9] = "j:"
    $moeglicheLaufwerke[10] = "k:"
    $moeglicheLaufwerke[11] = "l:"
    $moeglicheLaufwerke[12] = "m:"
    $moeglicheLaufwerke[13] = "n:"
    $moeglicheLaufwerke[14] = "o:"
    $moeglicheLaufwerke[15] = "p:"
    $moeglicheLaufwerke[16] = "q:"
    $moeglicheLaufwerke[17] = "r:"
    $moeglicheLaufwerke[18] = "s:"
    $moeglicheLaufwerke[19] = "t:"
    $moeglicheLaufwerke[20] = "u:"
    $moeglicheLaufwerke[21] = "v:"
    $moeglicheLaufwerke[22] = "w:"
    $moeglicheLaufwerke[23] = "x:"
    $moeglicheLaufwerke[24] = "y:"
    $moeglicheLaufwerke[25] = "z:"

    $alleBenutztenLaufwerke = DriveGetDrive("ALL")

    for $i = 0 to 25
    if _ArraySearch($alleBenutztenLaufwerke, $moeglicheLaufwerke[$i]) < 0 Then
    GUICtrlSetData($lwname, $moeglicheLaufwerke[$i])
    EndIf
    next
    EndFunc

    Func guiAnzeigen()
    ;WinSetState($mainGui, "", @SW_RESTORE)
    WinSetState($mainGui, "", @SW_Show)
    WinActivate($mainGui, "")
    EndFunc

    Func guiVerstecken()
    ;GUISetState(@SW_HIDE, $mainGui)
    WinSetState($mainGui, "", @SW_HIDE)
    EndFunc

    Func SpecialEvents()
    ;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
    Select
    Case @GUI_CTRLID = $GUI_EVENT_CLOSE
    ;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    guiVerstecken()
    Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
    ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    guiVerstecken()
    Case @GUI_CTRLID = $GUI_EVENT_RESTORE
    ;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    EndSelect
    EndFunc

    Func endscript()
    Switch @exitMethod
    Case 0
    ;WriteLog("Script beendet durch <<" & "Natural Closing>>")
    Case 1
    ;WriteLog("Script beendet durch <<" & "Close by Exit function>>")
    Case 2
    ;WriteLog("Script beendet durch <<" & "Close by clicking on exit of the systray>>")
    Case 3
    ;WriteLog("Script beendet durch <<" & "Close by user logoff>>")
    Case 4
    ;WriteLog("Script beendet durch <<" & "Close by Windows shutdown>>")
    EndSwitch
    EndFunc

    Func programExit()
    ;WriteLog("Beginn programExit()")
    exit
    EndFunc

    Func about()
    MsgBox(0, "About", "Programmiert von Michael Mangelsdorff, IT2.1")
    EndFunc

    ;*********************************************************************************
    ;*** Ende: Funktionen
    ;**************************

    [/autoit]

    So long,

    Mega

  • Hallo,

    nachdem ich das eben nochmal getestet habe (erfolglos) habe ich die aktuelle Version (ich hatte noch die 3.2.2.0) installiert und das Skript kompiliert.

    Siehe da, sowohl unter Vista als unter W2k funktioniert es einwandfrei.

    Problem gelöst :)

    Danke für die Hilfe !