Hilfe bei GUI mit Childs

  • Hiho,

    ich habe 1 MainGui und dazu 2 Guis, die entweder sichtbar oder unsichtbar sind.
    wenn ich nun alle 3 guis anzeigen lasse und in der taskbar das main-window anklicke (die childs erscheinen nicht in der taskbar), minimiert und maximiert er alle 3 fenster.

    das ist auch richtig so. das ganze möchte ich aber auch mit einem hotkey erreichen. leider greift er dabei nur auf das hauptfenster zu.
    mein erster ansatz ist dieser hier, wobei ich es dabei noch recht logisch finde, dass es nicht klappt:

    [autoit]

    $state = WinGetState($gui)
    If $state = 15 Or $state = 7 Then
    WinSetState($gui, "", @SW_HIDE)
    ElseIf $state = 23 Then
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    Else
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    EndIf

    [/autoit]

    leider finde ich keine alternative zu WinGetState (oder ist es wirklich GuiCtrlGetState?). Auf jeden fall will es so nicht klappen:

    [autoit]

    $state = WinGetState($gui)
    If $state = 15 Or $state = 7 Then
    GUISetState(@SW_HIDE, $gui)
    ElseIf $state = 23 Then
    GUISetState(@SW_SHOW, $gui)
    WinActivate($gui)
    Else
    GUISetState(@SW_SHOW, $gui)
    WinActivate($gui)
    EndIf

    [/autoit]

    oder auch

    [autoit]

    $state = GUICtrlGetState($gui)
    If $state = @SW_SHOW Then
    GUISetState(@SW_HIDE, $gui)
    ElseIf $state = @SW_HIDE Then
    GUISetState(@SW_SHOW, $gui)
    WinActivate($gui)
    Else
    GUISetState(@SW_SHOW, $gui)
    WinActivate($gui)
    EndIf

    [/autoit]

    wie muss ich es machen, dass er genau so reagiert wie auch ein klick in die taskbar?

    • Offizieller Beitrag

    Versuch doch mal die Child-Handles mit zu benutzen:

    [autoit]


    $state = WinGetState($gui)
    If $state = 15 Or $state = 7 Then
    WinSetState($gui, "", @SW_HIDE)
    WinSetState($child1, "", @SW_HIDE)
    WinSetState($child2, "", @SW_HIDE)
    ElseIf $state = 23 Then
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    Else
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    EndIf

    [/autoit]
    • Offizieller Beitrag

    Du könntest den Zustand der Childs aber in einer Variable speichern und diese dann dort einsetzen:

    [autoit]


    $ChildState1 = @SW_HIDE ; andere Funktion
    $ChildState2 = @SW_SHOW ; andere Funktion

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

    $state = WinGetState($gui)
    If $state = 15 Or $state = 7 Then
    WinSetState($gui, "", @SW_HIDE)
    WinSetState($child1, "", $ChildState1)
    WinSetState($child2, "", $ChildState2)
    ElseIf $state = 23 Then
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    Else
    WinSetState($gui, "", @SW_SHOW)
    WinActivate($gui)
    EndIf

    [/autoit]