Automatisches Schließen einer GUI, wenn nicht mehr benötigt.

  • Ok, ich verzweifle....

    Was ich will: Es wird eine GUI gestartet, in der ich zwischen zwei Komponenten meines Programmes auswähle. Sobald ich eine starte schließt sich die (nun überflüßige) GUI und es wird die Komponente ausgeführt.

    Was passiert: Die erste GUI wird gestartet und funktioniert einnwandfrei, d.h. die Komponente wird gestartet. Diese funktioniert dann auch und wenn ich fertig bin ist die erste GUI immer noch offen, reagier nicht auf Tastendrücke und lässt sich nur über den Taskmanager beenden. Alles Versuche irgendwo die GUI zu hiden oder zu löschen sind bisher gescheitert...

    Hier also der Code:

    [autoit]

    $GUI1 = GUICreate("GUI1", 300, 200, 200, 125)
    $Button1 =
    GUICtrlCreateButton("Komponenten 1", 100, 70, 100, 25, 0)
    $Button2 =
    GUICtrlCreateButton("Komponenten 2", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    While
    1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case
    $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Func1 ()

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

    Case $Button2
    _Func2 ()
    WEnd

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

    Func _Func1
    ()
    ...
    EndFunc

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

    Func _Func2 ()
    ...
    EndFunc
    Exit

    [/autoit]

    Danke schon mal...

    Einmal editiert, zuletzt von Alekij (13. April 2010 um 20:33)

  • Sry bin grad nich so in erklärlaune, aber der code ist eig selbterklärend (und garnicht viel anders als deiner).
    Alles interessante steht eig in der Hilfe

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    $GUI1 = GUICreate("GUI1", 300, 200, 200, 125)
    $Button1 = GUICtrlCreateButton("Komponenten 1", 100, 70, 100, 25, 0)
    $Button2 = GUICtrlCreateButton("Komponenten 2", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    $GUI2 = GUICreate("GUI2", 300, 200, 500, 225)
    $GUI3 = GUICreate("GUI3", 300, 200, 200, 625)

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

    While 1
    $nMsg = GUIGetMsg(1) ; Erweiterter GUIGetMsgMode (S. Hilfe)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    If $nMsg[1] = $GUI1 Then Exit
    GUISetState(@SW_HIDE, $nMsg[1])
    GUISetState(@SW_SHOW, $GUI1)
    Case $Button1
    GUISetState(@SW_SHOW, $GUI2)
    GUISetState(@SW_HIDE, $GUI1)

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

    Case $Button2
    GUISetState(@SW_SHOW, $GUI3)
    GUISetState(@SW_HIDE, $GUI1)

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

    EndSwitch
    WEnd

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

    Hvae fun

  • Okay, so ganz hab ich es nicht gecheckt...
    Dadurch, dass die Komponenten nicht per GUICreate eine GUI erstellen fällt eine Wenn 1 auf dann 2 zu Lösung leider aus...
    Aus der Hilfe werde ich leider nicht wirklich schlau in diesem Punkt, die habe ich selbstverständlich schon vorher probiert 8)

    Frage noch: Der hide-Befehl schließt es ja nicht sondern versteckt es, was muss ich machen, damit das Programm am Ende ganz zu ist, also wenn es fertig ist soll es nicht mehr im Task-Manager auftauchen...

  • Hallo Alekij,

    falls du in jeder func auch wieder eine Endlosschleife hast kannst du es auch so machen

    Spoiler anzeigen
    [autoit]

    $GUI1 = GUICreate("GUI1", 300, 200, 200, 125)
    $Button1 =
    GUICtrlCreateButton("Komponenten 1", 100, 70, 100, 25, 0)
    $Button2 =
    GUICtrlCreateButton("Komponenten 2", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    While
    1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case
    $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Func1 ()
    ExitLoop
    Case $Button2
    _Func2 ()
    ExitLoop
    WEnd

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

    Func _Func1
    ()
    ...
    EndFunc

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

    Func _Func2 ()
    ...
    EndFunc
    Exit

    [/autoit]

    die von SEuBo gepostete Methode ist aber besser, du musst dann aber alle Controls in der ersten und einzigen Schleife abfragen.
    Das geschickteste wäre allerdings, du postet dein komplettes Skript,

    mfg (Auto)Bert

  • Also das Ganze soll ein erster Versuch eine Programmes sein, dass einfach anhand von einem Passwort und einem Sicherheitslevel eine Eingabe verschlüßelt. Die einzelenen Komponenten funktionieren auch super, nur es bleibt eben dieses dummer Fenster auf und ich bin mit keiner der beiden Methoden zurecht gekommen....

    [autoit]

    #include <string.au3>
    #include <GUIConstants.au3>

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

    Dim $input
    Dim $output
    Dim $level
    Dim $passwort
    Dim $file
    Dim $CodeIt

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

    $CodeIt = GUICreate("CodeIt", 300, 200, 200, 125)
    $Button1 = GUICtrlCreateButton("Verschlüsseln", 100, 70, 100, 25, 0)
    $Button2 = GUICtrlCreateButton("Entschlüsseln", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Func1 ()
    ExitLoop
    Case $Button2
    _Func2 ()
    ExitLoop
    EndSwitch
    WEnd

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

    Func _Func1 ()
    $input = InputBox("Input", "Hier den zu verschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level soll verschlüßelt werden? (1 - 5)")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Exit
    EndIf

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

    $passwort = InputBox("Passwort", "Mit welchem Passwort möchten Sie den Text sichern?")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $file = InputBox("Speichern unter", "Der verschlüsselte Text wird an Ihrem Default-Speicherplatz abgelegt (meist Desktop). Geben Sie bitte einen Namen für das Dokument ein und drücken Sie OK. Machen Sie dann bitte so lange keine Eingabe, bis das Notepad wieder geschloßen wurde.")
    If $file = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $output = _StringEncrypt(1, $input, $passwort, $level)

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

    Run("notepad")
    WinWaitActive("Unbenannt - Editor")
    Send($output, 1)
    WinClose("Unbenannt - Editor")
    WinWaitActive("Editor", "&Speichern")
    Send("!s")
    WinWaitActive("Speichern unter", "&Speichern")
    Send($file)
    Send("!s")
    WinWaitActive("Speichern unter", "&Speichern")
    Send("!s")
    EndFunc

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

    Func _Func2 ()
    $input = InputBox("Input", "Hier den zu entschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level wurde der Text verschlüßelt")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Exit
    EndIf

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

    $passwort = InputBox("Passwort", "Wie lautet das Passort?", "", "*")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $output = _StringEncrypt(0, $input, $passwort, $level)

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

    MsgBox(0, "Output", "Der entschlüßelte Text lautet: " & @CRLF & $output)

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

    EndFunc
    Exit

    [/autoit]
  • Ja ja, schon, nur wo? Überall, wo ich es bisher probiert habe hat es nicht geklappt...

  • So habs jetzt eingebaut und mal auf meinem PC getestet, funktioniert jetzt:

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    #include <GUIConstants.au3>

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

    Dim $input
    Dim $output
    Dim $level
    Dim $passwort
    Dim $file
    Dim $CodeIt

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

    $CodeIt = GUICreate("CodeIt", 300, 200, 200, 125)
    $Button1 = GUICtrlCreateButton("Verschlüsseln", 100, 70, 100, 25, 0)
    $Button2 = GUICtrlCreateButton("Entschlüsseln", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUIDelete()
    _Func1 ()
    ExitLoop
    Case $Button2
    GuiDelete()
    _Func2 ()
    ExitLoop
    EndSwitch
    WEnd

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

    Func _Func1 ()
    $input = InputBox("Input", "Hier den zu verschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level soll verschlüßelt werden? (1 - 5)")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Exit
    EndIf

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

    $passwort = InputBox("Passwort", "Mit welchem Passwort möchten Sie den Text sichern?")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $file = InputBox("Speichern unter", "Der verschlüsselte Text wird an Ihrem Default-Speicherplatz abgelegt (meist Desktop). Geben Sie bitte einen Namen für das Dokument ein und drücken Sie OK. Machen Sie dann bitte so lange keine Eingabe, bis das Notepad wieder geschloßen wurde.")
    If $file = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $output = _StringEncrypt(1, $input, $passwort, $level)

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

    Run("notepad")
    WinWaitActive("Unbenannt - Editor")
    Send($output, 1)
    WinClose("Unbenannt - Editor")
    WinWaitActive("Editor", "&Speichern")
    Send("!s")
    WinWaitActive("Speichern unter", "&Speichern")
    Send($file)
    Send("!s")
    WinWaitActive("Speichern unter", "&Speichern")
    Send("!s")
    EndFunc

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

    Func _Func2 ()
    $input = InputBox("Input", "Hier den zu entschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level wurde der Text verschlüßelt")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Exit
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Exit
    EndIf

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

    $passwort = InputBox("Passwort", "Wie lautet das Passort?", "", "*")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Exit
    EndIf

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

    $output = _StringEncrypt(0, $input, $passwort, $level)

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

    MsgBox(0, "Output", "Der entschlüßelte Text lautet: " & @CRLF & $output)

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

    EndFunc
    Exit

    [/autoit]

    o
    L_/
    | ||

    This ist janaiky. Copy janaiky into your signature to help him on the war to the Weltherrschaft.

  • Unklar... Als ich es da hingeschrieben hatte, hat es nicht geklappt.. Nun ja, steckt man nicht drin...
    Ganz vielen Dank auf alles Fälle, jetzt klatt alles!

  • Hallo Alekij,

    du hast in deiner func1 ein Problem mit WinWaitActive, deswegen klappt es nicht. Hier zum Test:

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    #include <GUIConstants.au3>

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

    Dim $input
    Dim $output
    Dim $level
    Dim $passwort
    Dim $file
    Dim $CodeIt

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

    $CodeIt = GUICreate("CodeIt", 300, 200, 200, 125)
    $Button1 = GUICtrlCreateButton("Verschlüsseln", 100, 70, 100, 25, 0)
    $Button2 = GUICtrlCreateButton("Entschlüsseln", 100, 100, 100, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Func1()
    Case $Button2
    _Func2()
    EndSwitch
    WEnd

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

    Func _Func1()
    $input = InputBox("Input", "Hier den zu verschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level soll verschlüßelt werden? (1 - 5)")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Return
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Return
    EndIf

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

    $passwort = InputBox("Passwort", "Mit welchem Passwort möchten Sie den Text sichern?")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    $file = InputBox("Speichern unter", "Der verschlüsselte Text wird an Ihrem Default-Speicherplatz abgelegt (meist Desktop). Geben Sie bitte einen Namen für das Dokument ein und drücken Sie OK. Machen Sie dann bitte so lange keine Eingabe, bis das Notepad wieder geschloßen wurde.")
    If $file = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    $output = _StringEncrypt(1, $input, $passwort, $level)

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

    Run("notepad")
    WinWaitActive("Unbenannt - Editor")
    Send($output, 1)
    WinClose("Unbenannt - Editor")
    ;WinWaitActive("Editor", "&Speichern")
    ;Send("!s")
    ;WinWaitActive("Speichern unter", "&Speichern")
    ;Send($file)
    ;Send("!s")
    ;WinWaitActive("Speichern unter", "&Speichern")
    ;Send("!s")
    EndFunc ;==>_Func1

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

    Func _Func2()
    $input = InputBox("Input", "Hier den zu entschlüßelnden Text eingeben.")
    If $input = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    $level = InputBox("Level", "Auf welchem Level wurde der Text verschlüßelt")
    If $level = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    If $level < 1 Then
    MsgBox(0, "Fehler", "Level zu niedrig.")
    Sleep(3000)
    Return
    EndIf

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

    If $level > 5 Then
    MsgBox(0, "Fehler", "Level zu hoch.")
    Sleep(3000)
    Return
    EndIf

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

    $passwort = InputBox("Passwort", "Wie lautet das Passort?", "", "*")
    If $passwort = "" Then
    MsgBox(0, "Fehler", "Keine Eingabe erfolgt.")
    Sleep(3000)
    Return
    EndIf

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

    $output = _StringEncrypt(0, $input, $passwort, $level)

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

    MsgBox(0, "Output", "Der entschlüßelte Text lautet: " & @CRLF & $output)

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

    EndFunc ;==>_Func2
    Exit

    [/autoit]