Text von programminternem Fenster auslesen

  • Hallo,

    ich möchte gerne den Text verschiedener Meldungen auslesen.
    Da bei Programmstart (individuelle Branchensoftware) verschiedene Meldungen erscheinen können, möchte ich

    den Text auslesen um ihn zu protokollieren.
    Dafür gibt es die Funktion WinGetText, nur leider liefert die nicht den Textinhalt, sondern nur die Beschriftung des einzigen Buttons "OK".
    Gleiches gilt für Au3Info.exe. Dort finde ich folgende Informationen:
    Title: Informationen
    Class: TMessageForm
    Visible Text: OK
    aber keine Info zu ClassNameNN oder Text.

    Gibt´s noch 'ne andere Möglichkeit, den Inhalt der Meldung auszulesen?
    Hilft mir eigentlich die HandleID oder wird die auf verschiedenen Rechnern unterschiedlich von Windows vergeben?

    Wäre dankbar für jeden Hinweis.

    Gruß
    TinkyWinky

    Einmal editiert, zuletzt von TinkyWinky (23. Oktober 2009 um 22:44)

  • Hallo TinkyWinky,

    Gibt´s noch 'ne andere Möglichkeit, den Inhalt der Meldung auszulesen?
    Hilft mir eigentlich die HandleID oder wird die auf verschiedenen Rechnern unterschiedlich von Windows vergeben


    Mir ist keine andere Möglichkeit bekannt. Die Handles können sich von Programmstart zu Programmstart unterscheiden,

    mfg (Auto)Bert

  • Vielen Dank AutoBert.
    Eine andere Antwort wäre mir lieber gewesen :D
    Dann habe ich wohl keine Chance, den Text der Meldungen auszulesen.
    Gruß
    TinkyWinky

  • Zitat

    Dann habe ich wohl keine Chance, den Text der Meldungen auszulesen.

    das muss nicht sein...
    Was musst du mit dem Text in den Fenstern denn anfangen? Weiterverarbeiten, auswerten?
    Kannst du mal ein Bild von so einem Fenster posten?

  • Wenn gleiche "Fensterarten" gleiche textstücke haben kannst du es vielleicht mit PixelSearch annähernd auswerten. Zumindest kannst du damit schon einmal die "Art" der meldung bestimmen.

    zb:
    Die nachrichten
    FEHLER : Fehlernummer 52525
    FEHLER : Fehler in Datenbank
    FEHLER : Fehlernummer 7517
    haben ja alle was gemeinsam und zwar "FEHLER :". diesen part könntest du sogar mit pixelsearch & co auslesen. Sind die Fehler statisch, also ändern sich die meldungen selbst nicht ( kein Fehlernummern oder sowas) kannst du ja sogar GENAU den Fehler mit pixelsearch definieren. Also wenn zb folgende Medlungen kommmen würden

    FEHLER : Fehler in Programm
    FEHLER : Fehler in script
    FEHLER : Fehler beim Kaffeetrinken

    Könntest du für jede meldung eine eigene Pixelchecksum erstellen, und diese mit dem jeweiligen Fehler "verknüpfen"

    ich hoffe man kann mir folgen :wacko:

  • Zitat

    Könntest du für jede meldung eine eigene Pixelchecksum erstellen, und diese mit dem jeweiligen Fehler "verknüpfen"

    Das ginge doch DAMIT einfacher...

    Mittlerweile gibt es auch OCR-Lösungen, die vielversprechend sind....


  • Das ginge doch DAMIT einfacher...

    Mittlerweile gibt es auch OCR-Lösungen, die vielversprechend sind....

    Na wie du sicher merkst bin ich selbst noch Anfänger in Sachen AutoIt und programmier deshalb oft um 20 Ecken. Aber trotzdem möchte ich andern mit meinem , wenn auch noch recht kleinen, AutoIt Wissen helfen ^^

  • Hallo Leute,
    vielen Dank für Eure Antworten. Ich hatte mich schon fast mit meinem Schicksal abgefunden,
    aber offensichtlich gibt es noch Lösungsansätze.

    Andy: ja, ich möchte die Meldungen auswerten und entsprechend darauf reagieren.
    Zwei Beispiele hab ich mal angehängt.
    Mein Ziel ist, eine Datenbankanwendung automatisiert zu steuern.

    Die Idee mit PixelSearch und PushTheButton ist interessant, aber wenn mein Script auf verschiedenen
    Rechnern mit unterschiedlicher Bildschirmauflösung und ggf. unterschiedlichen Betriebssystemen (XP/Vista)
    laufen soll, dann wird das mit den gespeicherten Grafiken vermutlich schwierig.
    Für mich als absoluten Anfänger scheint es jedenfalls so.

    Gruß
    TinkyWinky

  • @TinkyWinky
    Die Bildschirmauflösung ist nicht das Problem, eher die diversen Schriftgrößeneinstellungen der User. Solange das aber festliegt, ist die "Bilderkennung" eine Option, ggf macht man auf jedem "System" (XP,Vista, Win7) ein "Foto" und gibt alle diese Pics dem Such-Programm mit. Da ca. 20 Bilder pro Sekunde auf dem Bildschirm gefunden werden können, wäre somit das System egal.

    Aber probiere vorher bitte mal etwas aus.
    Sobald das Fenster erscheint, drück mal Ctrl-C für kopieren. Öffne Notepad/Editor und drück dann Ctrl-V für einfügen. Wenn dann dein Meldungstext erscheint, dann hast du gewonnen ^^
    Wenn nicht, dann helfe ich dir gerne mit einem Script zur Erkennung per Bildersuche.

    ciao
    Andy

  • Ich fasse es nicht....wie geil ist das denn? :thumbup:
    CTRL+C und CTRL+V bringt den Meldungsinhalt tatsächlich im Notepad!

    Mensch Andy, vielen Dank. Wie mach ich das nun am besten?
    Mit SEND ("^C") in die Zwischenablage und dann mit _ClipBoard_GetData ? Oder wie?

    Gruß
    TinkyWinky

    Edit:
    also _ClipBoard_GetData funktioniert bei mir irgendwie nicht; gibt immer nur '0' zurück.
    Aber ClipGet funktioniert.
    Nur leider macht der SEND-Befehl nicht das, was er soll.

    [autoit]


    WinWaitActive("Informationen")
    Send("^C")
    $tmp = clipget()
    MsgBox(0,"",$tmp)

    [/autoit]


    Warum klappt das nicht?

    Einmal editiert, zuletzt von TinkyWinky (22. Oktober 2009 um 19:57)

  • keine Ahnung warum das nicht klappt, versuch mal bei send (ctrl+c) ein kleines c statt des C
    kann sein dass er das grosse C als shift+c interpretiert, also ctrl+shif+c und ob das dasselbe ist wie ctrl+c weiss ich nicht^^

  • Hallo Andy,

    es war tatsächlich das große C, weshalb es nicht klappte. Mit kleinem c funktionierts. :D
    Also, so muss es korrekt lauten: Send("^c")

    Herzlichen Dank!!!

    Schönen Gruß von
    TinkyWinky

    • Offizieller Beitrag

    es war tatsächlich das große C, weshalb es nicht klappte. Mit kleinem c funktionierts. :D
    Also, so muss es korrekt lauten: Send("^c")

    :D
    Yep, das sieht die Hilfe ebenso:

    Zitat von Hilfe

    N.B. Some programs are very choosy about capital letters and CTRL keys, i.e. "^A" is different to "^a". The first says CTRL+SHIFT+A, the second is CTRL+a. If in doubt, use lowercase!