Tail in GUI wird nicht mehr beendet.

  • Hallo Gemeinde,

    vielleicht (und davon gehe ich aus) kann mir jemand von euch bei der Lösung meines Problems helfen.
    Ich hab mir ein kleins Prog. geschrieben mit verschiedenen Funktionen unter anderem ein Fenster in dem ein Tail läuft.
    Das funktioniert auch alles, sobald ich aber den Tail aufrufe, komme ich aus der Schleife nicht mehr raus. Das Fenster des Tail läßt sich nicht mehr verbergen und ist immer im Vordergrund.

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <file.au3>
    #include <IniDateiTst.au3>
    ; #include <LaufwerkeTst.au3>
    Func Start()
    EndFunc ;==>Start

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

    #region ### Aufbau der Benutzeroberfläche ###

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

    $Form1_1 = GUICreate("Persuasion Manager", 800, 600, 200, 100)
    $Beginn = GUICtrlCreateTab(16, 48, 585, 353)
    GUICtrlCreateLabel("Persuasioin Manager für die Test! ", 100, 10, 400, 28)
    GUICtrlSetFont(-1, 16, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x55AA00)
    $OverLayInst = GUICtrlCreateTabItem("Start")
    GUICtrlCreateLabel("Persuasion Manager ", 176, 124, 208, 28)
    GUICtrlSetColor(-1, 0x0066CC)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Schön das Sie sich für den Persuasion Manager entschieden haben ;-)", 80, 180, 400, 17)
    GUICtrlCreateLabel("Dises Programm soll Sie bei der Verwaltung der Output Server für M3 unterstützen.", 80, 200, 400, 17)
    GUICtrlCreateLabel("Durch klicken auf die oberen Reiter gelangen Sie zu den einzelnen Funktionen.", 80, 220, 400, 17)

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

    ; ===================================================== D U X F I L E I N S T A L L A T I O N ======================================

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

    $DuxInstall = GUICtrlCreateTabItem("Dux Install")
    $DuxInstButton = GUICtrlCreateButton("OK", 224, 320, 89, 25)
    GUICtrlCreateLabel("Dux File Installation ", 176, 144, 208, 28)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0066CC)
    GUICtrlCreateLabel("Bitte tragen Sie im unten stehende Feld die RFC Nummer für die Sicherung ein.", 120, 200, 375, 17)
    $sDuxSichVerz = GUICtrlCreateInput("", 192, 225, 177, 20)
    GUICtrlSetBkColor(-1, "-2")
    GUICtrlCreateLabel("Bitte geben Sie hier den Namen des neuen Dux-files ein. z.B. MWS435", 120, 260, 375, 30, -1, -1)
    $fDuxFile = GUICtrlCreateInput("", 192, 285, 177, 20, -1, 512)

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

    ; ===================================================== O V E R L A Y I N S T A L L A T I O N ======================================

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

    $OverLayInst = GUICtrlCreateTabItem("Overlay Install")
    $aSichNr = GUICtrlCreateInput("", 192, 248, 177, 21)
    $Label3 = GUICtrlCreateLabel("Overlay Installation ", 176, 144, 185, 28)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0066CC)
    $sOverButton = GUICtrlCreateButton("Overlay", 216, 320, 123, 25)
    $TextOver_1 = GUICtrlCreateLabel("Tragen Sie Bitte die RFC Nummer in das Feld ein und klicken anschliessend", 115, 181, 378, 17)
    $TextOver_2 = GUICtrlCreateLabel("auf den Button Overlay um die zu Installierende Datei auszuwählen.", 115, 201, 378, 17)
    ; ==============================================================================================================
    ; L o g D a t e i l e s e n
    ; ==============================================================================================================
    $TabSheet8 = GUICtrlCreateTabItem("Log File lesen")
    ; $aDateiLesen = GUICtrlCreateEdit(" ", 20,80,500,300)
    $aButtonLogStart=GUICtrlCreateButton("Start", 520,100,80)
    ; ==============================================================================================================
    ; L o g D a t e i l e s e n
    ; ==============================================================================================================
    $TabSheet9 = GUICtrlCreateTabItem("Platzhalter")

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

    ; ==================================================== F u ß z e i l e ===================================
    GUICtrlCreateTabItem("")
    $Label7 = GUICtrlCreateLabel("2014 - (c) by M. Klein", 496, 416, 104, 17)
    GUICtrlCreateLabel("Persuasion Manager v. Beta 0.4.0", 10,416, 250, 17)
    $Pic1 = GUICtrlCreatePic("Images\Boellhofflogo.jpg", 528, 0, 65, 65)
    GUISetState(@SW_SHOW)
    #endregion ### Aufbau der Benutzeroberfläche ###

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

    #Region ### Variablen Deklaration
    ;================================================== Varoablen deklaration=======================================================================
    ; Funktion: Werte der Ini Datei auslesen und Variablen zuordnen
    ;================================================================================================================================================
    Global $Overlay_1 = IniRead($IniDatei, "Server_1", "Overlay_1", "")
    Global $Overlay_2 = IniRead($IniDatei, "Server_2", "Overlay_2", "")
    ; Global $Overlay_3 = IniRead($IniDatei, "Server_3", "Overlay_3", "")

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

    Global $nServerName_1 = IniRead($IniDatei, "Server_1", "ServerName_1", "")

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

    Global $Export_Server_1 = IniRead($IniDatei, "Server_1", "Exported", "")
    Global $nServerName_2 = IniRead($IniDatei, "Server_2", "ServerName_2", "")
    ; Global $nServerName_3 = IniRead($IniDatei, "Server_3", "ServerName_3", "")

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

    Global $Export_Server_2 = IniRead($IniDatei, "Server_2", "Exported", "")
    ; Global $Export_Server_3 = IniRead($IniDatei, "Server_3", "Exported", "")

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

    Global $Export_Server_2 = IniRead($IniDatei, "Server_2", "Exported", "")
    Global $Event_Server_2 = IniRead($IniDatei, "Server_2", "Events", "")
    Global $Process_Server_2 = IniRead($IniDatei, "Server_2", "Processes", "")

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

    Global $Language_1 = IniRead($IniDatei, "Server_1", "Tables", "")
    Global $Language_2 = IniRead($IniDatei, "Server_2", "Tables", "")

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

    Global $RestVerz = IniRead($IniDatei, "Server_2", "Exported", "")
    Global $RestVerz_Event = IniRead($IniDatei, "Server_2", "Events", "")

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

    Global $aEvent_2 = IniRead($IniDatei, "Server_2", "Events", "")
    Global $aExport_2 = IniRead($IniDatei, "Server_2", "Exported", "")
    Global $aProcesses_2 = IniRead($IniDatei, "Server_2", "Processes", "")
    ; Global $aEvent_3 = IniRead($IniDatei, "Server_3", "Events", "")
    ; Global $aExport_3 = IniRead($IniDatei, "Server_3", "Exported", "")
    ; Global $aProcesses_3 = IniRead($IniDatei, "Server_3", "Processes", "")

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

    Global $Function_1 = IniRead($IniDatei, "Server_1", "Function_1", "")
    Global $Function_2 = IniRead($IniDatei, "Server_2", "Function_2", "")
    ; Global $Function_3 = IniRead($IniDatei, "Server_3", "Function_3", "")

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

    #EndRegion ### Variablen Deklaration

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    UnMount()
    ;========================================== O V E R L A Y S I N S T A L L ====================================================================
    ; Funktion: Erstellen eines Sicherungsordners Verschieben der Orginaldatei und Kopieren der Overlay Datei
    ;================================================================================================================================================

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

    Case $sOverButton
    $message = "Wäheln Sie eine Datei aus."
    $var = FileOpenDialog($message, $Overlay_1 & "\", "Overlay (*.lxf) |Alle (*.*)", 1 + 2)
    If @error Then
    MsgBox(4096, "", "Sie haben keine Datei(en) ausgewählt")
    Else
    $var = StringReplace($var, "|", @CRLF)
    $asSplit = StringSplit($var, '\')
    $OverDatei = $asSplit[$asSplit[0]]
    $Ausw = MsgBox(49, "", "Soll die Datei " & $OverDatei & " Kopiert werden?")
    Switch $Ausw
    Case 1; OK
    VerzPruefen()
    ContinueLoop
    Case 2; Abbruch
    Start()
    EndSwitch
    EndIf
    ;=============================================== D U X I N S T A L L =========================================================================
    ; Funktion: Erstellen eines Sicherungsordners Verschieben der Orginaldatei und Kopieren der Dateien
    ;================================================================================================================================================

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

    Case $DuxInstButton
    Global $DuxDatei_1 = GUICtrlRead($fDuxFile)
    Global $fDuxDatei = ($DuxDatei_1 & "*.*")
    If (StringLen($fDuxDatei) < 9) Then
    MsgBox(16, "Fehler", "Der Dateiname muss mindestens 6 Zeichen lang sein.")
    ; Start()
    Else
    Global $sDuxSichOrd = GUICtrlRead($sDuxSichVerz)

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

    If FileExists($Export_Server_1 & "\" & $fDuxDatei) Then

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

    ;If FileExists($Export_Server_2 & "\" & $fDuxDatei) And FileExists($Export_Server_3 & "\" & $fDuxDatei) Then ; Abfrage am 17.06.2014 entfernt.
    PruefSichVerzeichnis()
    ContinueLoop
    ; Else
    $BoxWeiterAbbruch = GUICreate("BoxWeiterAbbruch", 361, 113, -1, -1, -1, -1)
    $Fortfahren = GUICtrlCreateButton("Fortfahren", 80, 60, 100, 30, -1, -1)
    $Abbruch = GUICtrlCreateButton("Abbruch", 220, 60, 100, 30, -1, -1)
    GUICtrlCreateLabel("Die Datei " & $fDuxDatei & "existiert auf einem der Produktionsserver nicht!" & @CRLF & "Wollen Sie fortfahren oder abbrechen?", 60, 10, 277, 32, -1, -1)
    GUICtrlSetBkColor(-1, "-2")
    GUICtrlCreatePic("C:\Program Files\InstDux\Pic\Boellhofflogo.jpg", 20, 50, 50, 50, -1, -1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete($BoxWeiterAbbruch)
    Exit
    Case $Fortfahren
    PruefSichVerzeichnis()
    ContinueLoop
    Case $Abbruch
    GUIDelete($BoxWeiterAbbruch)
    ; Start()
    ContinueLoop
    EndSwitch
    WEnd
    ; EndIf

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

    Else
    MsgBox(32, "Fehler", "Die Datei " & $fDuxDatei & " existiert auf dem Server " & $nServerName_1 & " nicht. Bitte wiederholen Sie Ihre Eingabe!")
    ; Start()
    EndIf
    EndIf

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

    ;=========================================================================================
    ; T a i l
    ;=========================================================================================

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

    case $aButtonLogStart
    $EndeTail = GUICtrlCreateButton("Ende", 520, 140, 80)
    ;$aButtonLogStart=GUICtrlCreateButton("Start", 520,100,80)
    $tailfile = "C:\Users\MKlein\Documents\TestDatei.txt"
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    $line = _tail($tailfile)
    $Edit = GUICtrlCreateEdit($line, 20,80,500,300, $WS_HSCROLL)

    ; GUISetState(@SW_SHOW,$TailTab)
    While 1
    Sleep(2500) ; Häng rum
    ;$Zeit=@HOUR & ":" & @MIN & ":" & @SEC
    $line = _tail($tailfile)
    GUICtrlSetData($Edit, $line);Nicht immer neues Edit erstellen sondern einfach Edit updaten mit GuiCtrlSetData!
    ; GUICtrlCreateEdit($line, 20,80,500,300, $WS_HSCROLL)

    $cMsg = GUIGetMsg()
    Switch $cMsg
    Case $EndeTail
    GUICtrlSetState($Edit, $GUI_delete)

    Start()
    EndSwitch
    ExitLoop
    WEnd

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

    EndSwitch
    WEnd

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

    #region ### OverLay Installation ###
    ; ===================================================== O V E R L A Y I N S T A L L A T I O N ======================================

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

    Func VerzPruefen()
    $OverVerz_1 = GUICtrlRead($aSichNr, 1)
    $OverSichVerz_2 = ($Overlay_2 & "\" & @YEAR & @MON & @MDAY & "_" & $OverVerz_1)
    ; $OverSichVerz_3 = ($Overlay_3 & "\" & @YEAR & @MON & @MDAY & "_" & $OverVerz_1)

    If FileExists($OverSichVerz_2) Then
    MsgBox(0, "Warnung", "Achtung das Verzeichnis existiert bereits!" & @CRLF & $OverSichVerz_2 & @CRLF & "geben Sie bitte einen anderen Verzeichnisnamen ein.")
    Start()
    Else

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

    DirCreate($OverSichVerz_2)
    ; DirCreate($OverSichVerz_3)
    FileMove($Overlay_2 & "\" & $OverDatei, $OverSichVerz_2 & "\")
    ; FileMove($Overlay_3 & "\" & $OverDatei, $OverSichVerz_3 & "\")

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

    FileCopy($Overlay_1 & "\" & $OverDatei, $Overlay_2 & "\", 1)
    ; FileCopy($Overlay_1 & "\" & $OverDatei, $Overlay_3 & "\", 1)
    MsgBox(0, "", "Die Datei " & $OverDatei & " wurde kopiert!")
    EndIf
    EndFunc ;==>VerzPruefen
    #endregion ### OverLay Installation ###

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

    #region Dux File Installation
    ; ===================================================== D U X F I L E I N S T A L L A T I O N ======================================

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

    Func PruefSichVerzeichnis()

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

    $Verz_Prod_2Exp = $Export_Server_2 & "\" & @YEAR & @MON & @MDAY & "_" & $sDuxSichOrd
    $Verz_Prod_2Ev = $Event_Server_2 & "\" & @YEAR & @MON & @MDAY & "_" & $sDuxSichOrd
    $Verz_Prod_2Proc = $Process_Server_2 & "\" & @YEAR & @MON & @MDAY & "_" & $sDuxSichOrd

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

    If FileExists($Verz_Prod_2Ev) Then
    MsgBox(4096, "", "Das Verzeichnis " & $Verz_Prod_2Ev & " existiert bereits auf MOM03" & @CRLF & "Bitte wählen Sie einen anderen Verzeichnisnamen!")
    Start()

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

    Else
    ; Sicherungsverzeichnisse erstellen
    DirCreate($Verz_Prod_2Exp)
    DirCreate($Verz_Prod_2Ev)
    DirCreate($Verz_Prod_2Proc)
    MsgBox(4096, "", "Verzeichnis " & @CRLF & $Verz_Prod_2Ev & @CRLF & " wurde auf beiden Produktions Test erstellt!")

    ;Dateien kopieren
    $Event_Server_1 = IniRead($IniDatei, "Server_1", "Events", "")
    $Process_Server_1 = IniRead($IniDatei, "Server_1", "Processes", "")

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

    FileMove($Event_Server_2 & "\" & $fDuxDatei, $Verz_Prod_2Ev)
    FileMove($Process_Server_2 & "\" & $fDuxDatei, $Verz_Prod_2Proc)
    FileMove($Export_Server_2 & "\" & $fDuxDatei, $Verz_Prod_2Exp)

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

    FileCopy($Event_Server_1 & "\" & $fDuxDatei, $Event_Server_2)
    FileCopy($Export_Server_1 & "\" & $fDuxDatei, $Export_Server_2)
    FileCopy($Process_Server_1 & "\" & $fDuxDatei, $Process_Server_2)
    MsgBox(0, "Erledigt", "Die Dateien wurden gesichert und kopiert!")
    EndIf
    EndFunc

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

    #endregion Dux File Installation

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

    Func CLOSEClicked()
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...", 1)
    Exit
    EndFunc ;==>CLOSEClicked

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

    Func _tail($PROT)

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

    Local $aRecords = StringSplit(FileRead($PROT), @LF)
    $lesezeile = 10
    $tailtext = ''
    For $i = $aRecords[0]-$lesezeile To $aRecords[0]
    $tailtext &= $aRecords[$i] & @CRLF
    Next
    Return $tailtext

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

    EndFunc ;==>_tail

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

    Func UnMount()
    ; DriveMapDel($aServer_1LW)
    ; DriveMapDel($aServer_2LW)
    ; DriveMapDel($aServer_3LW)
    Exit
    EndFunc ;==>UnMount

    [/autoit]

    Vielen Dank!

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o

    • Offizieller Beitrag

    Hallo,

    du wechselst in Zeile 216 in den OnEvent-Modus, arbeitest aber im MessageLoop-Modus (GuiGetMsg()), das geht so nicht. Entweder OnEvent- oder MessageLoop-Modus.

  • Hi,
    du kannst entweder den OnEventModus oder den MessageModus benutzen, beides zusammen geht nicht...

  • Vielen Dank für die schnellen Antworten,
    jedoch kann mir das jemand anhand eines Beispiels erklären?!
    Ich muss zu meiner Schande gestehen, den Teil mit dem Tail habe ich "nur" angepasst.

    Dnke nochmal.

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o

  • reines Beispiel um GUIOnEventMode ein- und auszuschalten