Was ist ein "sichtbares" Fenster, bzw wie finde ich heraus ob ein Fenster von einem anderen verdeckt ist?

  • Moinz,
    habe eine Gui mit 2 (Haupt- und Neben-)Fenstern, beide sind nebeneinander angedockt.
    Wenn ich nun ein Fenster über diese beiden lege und dann das "Hauptfenster" per Klick auf die Taskbar in den Vordergrund hole, dann soll das 2.Fenster auch erscheinen, es bleibt aber unter den anderen Fenstern liegen.
    Es soll aber auch nur zusammen mit dem ersten Fenster erscheinen.
    Habe schon mit

    [autoit]

    local $stat1=bitand(Wingetstate($anleitung),1)
    local $stat2=bitand(Wingetstate($anleitung),2)
    local $stat3=bitand(Wingetstate($anleitung),4)
    local $stat4=bitand(Wingetstate($anleitung),8)
    local $stat5=bitand(Wingetstate($anleitung),16)
    local $stat6=bitand(Wingetstate($anleitung),32)

    [/autoit]

    den Status der Fenster abgefragt, aber der Status "sichtbar" bleibt, egal ob das Fenster verdeckt ist oder nicht.
    Zzt. weiss ich nicht mal wie ich herausfinde, ob ein Fenster überhaupt verdeckt bzw sichtbar ist.....
    Sonst wäre es einfach, wenn mein Hauptfenster sichtbar ist, dann Nebenfenster aktivieren. Wenn Hauptfenster nicht sichtbar, dann passiert nix.

    ciao
    Andy

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (19. Oktober 2009 um 16:46)

  • Ermittelt den Text eines Fensters.

    WinGetText ( "title " [, "text "] )

    [autoit]

    $text = WinGetText("Unbenannt -", "")
    MsgBox(0, "Der gelesene Text lautet:", $text)

    [/autoit]

    oder

    [autoit]

    if WinActive ( "title" [, "text"] ) then
    WinFlash ( "title" [,"text" [,flashes [,delay ]]])

    [/autoit]
  • Wie schon gesagt, ein Fenster zu aktivieren ist nicht das Problem. Problem ist herauszufinden, ob das 2. Fenster verdeckt ist.
    Da die Abfrage in einer Endlosschleife läuft kann ich nicht einfach das 2. Fenster aktivieren wenn das 1. aktiv ist (oder gerade geworden ist). Denn dann wäre das 2. Fenster permanent aktiv....

    [autoit]

    while 1
    if winactive($gui) then winactivate($gui2) ;funzt nicht, bei jedem klick in die erste gui wird die 2. aktiviert
    wend

    [/autoit]

    Werde wohl mal bei den Messagehandlern gucken gehen müssen...

  • das zweite fenster hat das den gleichen namen ?
    mach das doch so wenn das erste aktive ist schicke es doch automatisch in den

    [autoit]

    @SW_SHOWMINIMIZED

    [/autoit]


    und das zweite in

    [autoit]

    @SW_SHOWMAXIMIZED

    [/autoit]


    [autoit]

    while 1
    if winactive($gui) then winactivate($gui2) ;funzt nicht, bei jedem klick in die erste gui wird die 2. aktiviert
    wend

    [/autoit]


    mach es doch als

    [autoit]

    Func _fenster2 ()

    [/autoit]


    dann brauchst du keine schleife sonder machst es dann auf

    [autoit]

    Hotkeysend

    [/autoit]
  • Zitat

    $GUI_EVENT_RESTORE

    ...der isses, vielen Dank!^^

    was aber immer noch nicht die Frage beantwortet wie man herausfinden kann, ob ein Fenster von einem anderen verdeckt ist....

    • Offizieller Beitrag

    Ich verstehe das Problem immer noch nicht ganz. Wenn das zweite Fenster ein Child ist, dann wird es doch automatisch mit in den Vordergrund geholt!? :huh:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $hMainGui = GUICreate('Main-Gui')
    GUISetState()
    $hChildGui = GUICreate('Child-Gui', 200, 100, -1, -1, Default, Default, $hMainGui)
    GUISetState()
    While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    If $aMsg[1] = $hMainGui Then Exit
    EndSwitch
    WEnd

    [/autoit]
  • Oscar , frag mich mal, warum ich das Childfenster nicht benutze. In einer der früheren Scriptversionen hatte ich das so, gab aber aus irgendwelchen Gründen Probleme....

    [autoit]

    GUIRegisterMsg($WM_ACTIVATE, "_WM_ACTIVATE")

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

    Func _WM_ACTIVATE($hWnd, $msg, $wParam, $lParam)
    Local $status = BitAND($wParam, 0x0000FFFF)
    If $status And $hWnd = $Gui Then
    winactivate($anleitung)
    winactivate($gui)
    EndIf
    EndFunc ;==>_WM_ACTIVATE

    [/autoit]

    so funktioniert alles wie gehabt, im Prinzip die "childwindow"-funktion

    Habe auch mit der Z-Anordnung der Fenster rumgespielt, vgl.

    [autoit]

    _WinAPI_SetWindowPos

    [/autoit]

    wie üblich gibts 325 Methoden um auf ein und dasselbe Ergebnis zu kommen.

    Jetzt weiss ich aber wenigstens. wie ich herausfinde in welcher"Ebene" bzw. Tiefe oder Position (Z-Anordnung ist geil übersetzt^^) sich ein Fenster befindet.