Fensterhandling bei der Windows Bild und Faxanzeige

  • Hallo Zusammen,

    leider komme ich bei einem Problem nicht weiter. Kennt sich hiermit jemand aus?

    Ich öffne ein Bild mit der Windows Bild und Faxanzeige. Ein AutoIT Skript wartet darauf, fängt das Fenster ab und sendet das Kommando F11 um in den Vollbildmodus zu kommen. Das klappt auch hiermit

    [autoit]


    #Include <Misc.au3>
    #include <WindowsConstants.au3>

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

    IF _SINGLETON(@SCRIPTNAME, 1)= 0 THEN EXIT
    AUTOITSETOPTION("WinTitleMatchMode", 2)
    sleep(1000)

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

    WinWait("Windows Bild- und Faxanzeige", "")
    Winactivate("Windows Bild- und Faxanzeige", "")
    send("{F11}")

    [/autoit]

    Und jetzt das Problem. Beendet man das Vollbildfester mit dem rotenX das oben in der Ecke auftaucht. Dann ist man wieder bei dem weißen Fenster. Dort kann man das Bild löschen drehen etc. Dieses weiße Fenster will ich aber garnicht sehen. Vielmehr soll das sofort geschlossen werden wenn man aus dem Vollbild rausgeht. Leider haben Beide Fenster aber anscheinend densleben Klassennamen und den sleben Titel. Das heißt ich kann diese überhaupt nicht unterscheiden.

    Weiß jemand wie ich dort eventuell doch einen Untershcied machen kann eventuell über mehrere Instanzen oder ähnliches?

    Danke und Grüße

    Alex

    Einmal editiert, zuletzt von bentom (28. März 2009 um 14:16)

  • Hallo bentom,

    ich denke Du kannst den Status des Fensters folgendermaßen unterscheiden:
    FensterPosition:
    x>0 & y>0 = normale Fensteranzeige
    x=0 & y=0 = F11-Modus
    x=-4 & y=-4 = maximierter Fenstermodus

    ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich behaupte jetzt mal: Das ist nur ein Fenster.
    Deshalb lässt sich das schwer machen, höchstens mit Pixelgetcolor vielleicht...
    Oder probier mal ob sich der Wert von WinGetState ändert.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • So in etwa: Es gibt immer nur 1 Fenster im normalen Modus. Im Vollbild gibt es immer 2. Daran kann man es unterscheiden:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <WinAPI.au3>

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

    _Singleton("fsjgr34g3254tz8djfbewruw45jkhdi78tf34jk5nid6ftw45n9dsf63w4n5")
    $sTitle = "[CLASS:ShImgVw:CPreviewWnd]"

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

    While 1
    WinWaitActive($sTitle)
    $hWnd = WinGetHandle($sTitle)
    $style = _WinAPI_GetWindowLong($hWnd,$GWL_STYLE)
    If BitAND($style, $WS_CAPTION) Then ; wenn es eine Titelzeile hat, ist es kein Vollbild
    ControlSend($hWnd, "", "", "{F11}")
    Do
    Sleep(500)
    $Wins = WinList($sTitle)
    Until $Wins[0][0] < 2 ; im Vollbild sind 2 Fenster offen
    While WinClose($sTitle) ; alle Fenster mit der Klasse schließen
    WEnd
    EndIf
    WEnd

    [/autoit]
  • Dann sag ich herzlichen Dank.

    Mit der Abfrage der 2 Fenster funktioniert es wunderbar

    Danke und LG

    Alex