Fenster erkennen ohne Infos ?

  • Hallo,
    ich habe ein Programm, das ich nur über Maus- und Tastatursimulationen ansprechen kann (zumindest in dem Fall, wo ich drauf aus bin).

    Also habe ich die Maus gesetzt und einen Doppelklick an der richtigen Stelle ausführen lassen - funktioniert auch !! Durch diesen Doppelklick wird ein neues Fenster geöffnet - und über dieses neue Fenster brauch ich Daten, damit ich es verschieben, minimieren und später wieder schliessen kann.

    Vom MainFenster hab ich den Titel, Handle ect. - alles was ich brauch. Leider kann ich kein Element per Control-Befehl ansprechen - deshalb die Maussimulation ... die mir ja auch ein neues Fenster öffnet.

    Nur : wie komme ich an Daten zu diesem neuen Fenster ?

    Mit WinList() läßt sich die Liste abrufen (1x vor dem Mausklick und 1x nach dem Mausklick) Die Differenz beider Kontrollen müßte mir ebenfalls Infos des neues Fensters lieferen.

    Geht es nicht auch einfacher ???

    Sowas wie WinGetAktivTitle ? (der Name sagt doch schon alles, oder ?
    Oder gibt es eine Variable, die den Handle des grad aktives Fensters speichert ?


    Opi

  • Zitat

    Original von peethebee


    Übrigens: :willkommen:

    peethebee

    Danke ^^


    Hat leider nicht geklappt - ich erhalte den Handle des Main-Fensters ...

    Vielleicht ist am Code was falsch ?

    Spoiler anzeigen
    [autoit]


    WinActivate ($Main_g)
    WinWaitActive ($Main_g, "", 30) ; MainWindow aktivieren (30 Sek. warten)
    If @Error <> 0 Then ; 1 = Main nicht gefunden --> Ende
    MsgBox (0, "ERROR", "Main ließ sich nicht aktivieren !")
    Exit
    EndIf

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

    ;MsgBox (0, "Check", "Main gefunden !")

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

    $altWinTitle = WinGetHandle ("") ; ermittelt den Handlel des akt. geöffneten Fensters (müßte demnach $Main_g sein)

    Sleep (500)

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

    MouseClick ("left", 50, 232, 2, 2) ; durch Doppelklick wird ein weiteres Fenster geöffnet und Main automatisch minimiert

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

    ;WinWaitNotActive ($altWinTitle)
    Sleep (2000) ; ein bischen Warten, um das neue Fenster in Ruhe aufbauen zu können
    $neuWinTitle = WinGetHandle ("") ; müßte eigentlich das neue Fenster sein, das ja nun aktiv ist !!

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $altWinTitle = ' & $altWinTitle & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $neuWinTitle = ' & $neuWinTitle & @crlf) ;### Debug Console

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

    7 Mal editiert, zuletzt von Schmunke (1. September 2007 um 16:14)

  • Zitat

    Original von BugFix
    Ebenfalls :willkommen:

    Danke ebenfalls ^^

    Damit hatte ich es am Anfang auch probiert - leider verweist es ebenfalls auf das Main-Fenster.


    In AutoHotKey hat das funktioniert, da in einer Systemvariable der Handle auf dem aktives Fenster automatisch gesetzt wird. Gibt es in AutoIT soetwas auch ?

    Opi

    2 Mal editiert, zuletzt von Schmunke (1. September 2007 um 16:17)

  • Zitat

    Original von BugFix
    Hat denn das neue Fenster einen konstanten Text, der sich vom Main-Fenster unterscheidet?
    Dann könntest du in WinGetTitle() diesen Text als Lokator verwenden.

    Ja - es gibt einen Text, der im neuen Fenster enthalten sein muss. Wie gesagt - mit WinList() finde ich auch dieses Fenster.

    Im weiteren Verlauf öffne ich noch mehr Fenster - alle haben den festen Bestandteil z.B.sp. " abcdef" sowie weitere Bestandteile "XYZ" die sich aber unterscheiden.

    Letzendlich kann ich um die 20 Fenster geöffnet haben.


    Opi

    Einmal editiert, zuletzt von Schmunke (4. September 2007 um 07:31)

  • Zitat

    Original von Xenobiologist
    HI,

    du kannst auch Regex benutzen für die Fenstertitel.

    So long,

    Mega


    Ähhmm ... Nein ! Ich keine einen Teiltext des Titels - dieser Teiltext ist in allen anderen bisher geöffneten Fenstern ebenfalls vorhanden. Ich habe keinen Handle auf dieses neue Fenster. Also kontrolliere ich die Gesamtanzahl aller Fenster (mit Teil-Titel) vor dem Mausklick und nach dem Mausklick (der Mausklick öffnet mir ein neues Fenster).

    Wo soll da RegEx zum Einsatz kommen ?? Damit finde ich doch das Fenster nicht ?!?!

    Ich stell heute Abend mal den Code ...

    Opi

  • Hallo Opi, ich habe genau das gleiche Problem.
    Kannst du mir bitte sagen, wie du das über Winlist gelöst hast, also die Winlist vor dem Öffnen des Fensters ermittelst, die Winlist nach dem Öffnen des Fensters ermittelst und dann über die Differenz auf das Handle des geöffneten Fensters schließt ??

    Danke