Guigetmsg()

  • Hallo Leute,
    Ich wollte heute ein Programm schreiben in dem sich ganz einfach eine Gui öfnet und man dann im Context Menü noch eine Gu öffnen kann!

    Mein Problem ist aber:
    Ich will das $GUI_EVENT_CLOSE Bei dem einen einfach nichts macht und bei dem anderen einefache nur die eine Gu geschlossen wird?

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    Opt("TrayMenuMode", 3)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Passwort-Dialog", 260, 158, 844, 268, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Geben sie das Passwort ein:", 8, 8, 171, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    $Button1 = GUICtrlCreateButton("OK", 32, 128, 89, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Cancel", 144, 128, 89, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("", 8, 96, 241, 21)
    $Menu = GUICtrlCreateContextMenu()
    $mExit = GUICtrlCreateMenuItem("Beenden...", $Menu)
    GUICtrlCreateMenuItem("", $Menu)
    $About = GUICtrlCreateMenuItem("Über das Script...", $Menu)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    If ProcessExists( "explorer.exe") Then ;Überprüfen ob der Process "explorer.exe" exsistiert
    ProcessClose( "explorer.exe");Wenn er exsistiert wird er geschlossen!
    EndIf
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GUICtrlButton_Click($Button1)
    Case $Button1
    $pWort = GUICtrlRead($Input1); $Input1 aulesen und in $pWort speichern!
    If $pWort = 'passwort' Then ;Passwort angeben
    MsgBox(0, "Passwort-Dialog", "Passwort richtig");Wenn dann passwort richtig ist
    Run( "explorer.exe")
    Exit
    Else
    MsgBox(0, "Passwort-Dialog", "Passwort falsch");Wenn dann passwort falsch ist
    EndIf
    Case $mExit
    _GUICtrlButton_Click($Button1)
    Case $About
    _About()
    EndSwitch

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

    WEnd

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

    Func _About()
    ;Hier soll sich eine Gui Öffnen
    EndFunc

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

    Ich habe etwas in der Hilfe gestöbert und bin daruf gestoßen ..dass man sich irgendwie etwas in einem Array senden lassen kann ..ich habe aber nich heraus bekommen wie das genau Funktioniert..

    Vielen Dank schon mal im Voraus

  • Auszug aus der Hilfe:

    Zitat

    Wird der "advanced"-Parameter verwendet, werden die Informationen in einem Array zurückgegeben:
    $array[0] = 0 oder Ereignis-ID oder Control-ID
    $array[1] = Der Fenster-Handle des Fensters, von dem das Ereignis gemeldet wird
    $array[2] = Der Control-Handle des Controls, von dem das Ereignis gemeldet wird (gegebenenfalls)
    $array[3] = Die aktuelle X-Position des Mauszeigers (relativ zum GUI-Fenster)
    $array[4] = Die aktuelle Y-Position des Mauszeigers (relativ zum GUI-Fenster)


    Meintest du das? Mit dem 2ten Array Element kannst du herausfinden von welcher GUI, das GUI_EVENT_CLOSE kam. ;)

  • Soweit wahr ich auch schon aber wen ich den jetzt abgefragt habe wie benutze ich denwert dann???


    PS: Sry kenn mich nich so gut mit dem Array zeug aus

  • Einfaches Beispiel:

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("", 100, 400, 100, 200)
    GUICtrlCreateLabel(@LF & " Schließ mich" & @LF & " danach!", 0, 0, 100, 50)
    $cButton = GUICtrlCreateButton("Nur ein Knopf",0,100,100,50)
    GUISetState()

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

    $hGUI2 = GUICreate("2tes GUI", 100, 50, 200, 200)
    GUICtrlCreateLabel(@LF & " Schließ mich zuerst", 0, 0, 100, 50)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case -3
    If $nMsg[1] = $hGUI Then Exit
    GUISetState(@SW_HIDE, $nMsg[1])
    Case $cButton
    MsgBox(0,"","Du hast den Knopf gedrückt. Warum machst du sowas?!")
    EndSwitch
    WEnd

    [/autoit]

    Groß ist du umstellung also nicht.
    Aus "GUIGetMsg()" wird "GUIGetMsg(1)" und aus "Switch $nMsg" wird "Switch $nMsg[0]"
    Dann musst du nur noch den Teil beim Case $GUI_EVENT_CLOSE bzw. -3 anpassen, sodass du die Fenster entsprechend unterscheidest.

  • Ich komm mir echt dumm vor aber ...es geht immer noch nich wen ich jetzt auf das zweite schließen drücke schlie´t sich alles???

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    Opt("TrayMenuMode", 3)
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Passwort-Dialog", 260, 158, 844, 268, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Geben sie das Passwort ein:", 8, 8, 171, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    $Button1 = GUICtrlCreateButton("OK", 32, 128, 89, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Cancel", 144, 128, 89, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("", 8, 96, 241, 21)
    $Menu = GUICtrlCreateContextMenu()
    $mExit = GUICtrlCreateMenuItem("Beenden...", $Menu)
    GUICtrlCreateMenuItem("", $Menu)
    $About = GUICtrlCreateMenuItem("Über das Script...", $Menu)

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

    GUISetState(@SW_SHOW)

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

    $hAbout = GUICreate("", 255, 100)
    $cLabel = GUICtrlCreateLabel("Dies ist eine About Box!", 0, 0, 255, 100, BitOR(0x200, 0x01))

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

    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1)
    ;~ If ProcessExists( "explorer.exe") Then ;Überprüfen ob der Process "explorer.exe" exsistiert
    ;~ ProcessClose( "explorer.exe");Wenn er exsistiert wird er geschlossen!
    ;~ EndIf
    Switch $nMsg[0]
    Case $Button1,$Button2, $GUI_EVENT_CLOSE, $mExit
    If $nMsg[1] = $Form1 Then
    $pWort = GUICtrlRead($Input1); $Input1 aulesen und in $pWort speichern!
    If $pWort = 'passwort' Then ;Passwort angeben
    MsgBox(0, "Passwort-Dialog", "Passwort richtig");Wenn dann passwort richtig ist
    ;~ Run( "explorer.exe")
    Exit
    Else
    MsgBox(0, "Passwort-Dialog", "Passwort falsch");Wenn dann passwort falsch ist
    EndIf
    Else
    GUISetState(@SW_HIDE,$nMsg[1])
    EndIf
    Case $About
    _About()
    EndSwitch

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

    WEnd

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

    Func _About()
    GUISetState(@SW_SHOW, $hAbout)
    EndFunc ;==>_About

    [/autoit]