Window ohne Title: wie Text einlesen?

  • Hallo,

    bei mir läuft eine Java-Anwendung, die ein Fenster ohne Titel erzeugt. Das Fenster enthält als Text "Challenge: " und einen achtstelligen Code sowie ein Input-Feld zur Eingabe eines Response-Strings sowie Buttons (z.B. OK ).

    Inzwischen ist es mir gelungen, dieses Fenster mit AutoIT anzusprechen und einen String in das Input-Feld zu schreiben und den OK-Button zu drücken. Das mache ich mit der Standard-Lösung:

    AutoItSetOption("WinTitleMatchMode", 4)

    ;Fenster aktivieren
    $handle = WinGetHandle("classname=SunAwtDialog", "")
    WinActivate( $handle )
    ;$response eingeben
    Send( $response )
    Send( "!o" , 0 )

    Es will mir aber nicht gelingen, mit AutoIT dieses Fenster anzusprechen und den Challenge-Code in eine Variable einzulesen.

    Ich habe es z.B. so versucht:

    challengeRead()
    msgbox(0,"Ergebnis challengeRead(): ", "challenge: " & challengeRead()) ; -> kein Wert! Warum?

    Func challengeRead()
    ;Fenster aktivieren
    $handle1 = WinGetHandle("classname=SunAwtDialog", "")
    WinActivate( $handle1 )
    $zwsp = WinGetText( $handle1 )
    $challenge1 = StringTrimLeft ( $zwsp, 11 )
    Return $challenge1
    EndFunc


    Könnt Ihr mir sagen, wie ich diese Aufgabe lösen kann?

    Grüße

    Cornelius

  • Hallo Spider,

    danke für den Hinweis! Das hat allerdings - wenn ich mich recht erinnere - auch nicht funktioniert. Dieser Code klappt auch nicht:

    #include <String.au3>

    AutoItSetOption("WinTitleMatchMode", 4)

    Dim $zwsp, $challenge
    Dim $challenge_handle

    ;warten auf Fenster mit challenge
    Sleep(3000)
    $challenge_handle = WinGetHandle("classname=SunAwtDialog", "Challenge:")
    WinActivate($challenge_handle)
    $zwsp = WinGetText ( $challenge_handle , "")
    $challenge = StringTrimLeft ( $zwsp, 11 )
    msgbox( 0, "Inhalt der Variable: " , "$zwsp: " & $zwsp) ; -> zeigt nichts an
    msgbox( 0, "Inhalt der Variable: " , "$challenge: " & $challenge) ;-> zeigt nichts an

    Ich scheine nicht die richtige Handle für das Fenster zu bekommen. Was mich verwundert ist, dass eine Handle in dem Code für das Hineinschreiben funktioniert.

    Gibt es sonst noch eine Idee, was da schieflaufen könnte?

    Grüße

    Cornelius

  • Mit den Standard-AutoIt Funktionen für Fenster und Controls kann man nur GDI-basierte Fenster ansprechen.
    Also dem Standard-Windows-GUI-System.
    Bei z.B. Flash, oder wie bei dir, JAVA-basierten Fenstern kann man mit diesen Funktionen nichts ausrichten.
    Zum Automatisieren solcher Sachen kann man spontan erstmal nur mit Send und MouseClicks rangehen.
    Auslesen ist erstmal gar nicht möglich.
    Prinzipiell sollte man über Umwege über die JAVA-Access-Bridge (eine DLL mit entsprechenden Funktionen) da rankommen - fragt sich nur in wie weit Aufwand und Nutzen da in einem vernünftigen Verhältnis stehen.

  • Danke AspirinJunkie,

    das ist es wohl!

    Bzgl. des Nutzen : Aufwand-Verhältnisses muss ich mich wohl einfach mal vortasten. Oder hast Du Erfahrungen, die die Anwendung dieser Bridge als nicht empfehlenswert erscheinen lassen?

    Grüße

    Cornelius

  • Ich hab damit rein gar keine Erfahrung - weiß nur das dies eine Schnittstelle ist von der ich meine das man damit an die Informationen heran kommt.
    Was die Sache mit dem Aufwand angeht:
    Naja man muss sich erstmal durch eine Doku lesen, diese verstehen und das ganze dann umsetzen.
    Wird auf DLLCall´s zulaufen - je nach dem ob du damit schon Erfahrung hast kommt eine Beschäftigung mit der Thematik noch dazu.
    Sieh´s dir mal an dann wirst du ja sehen wie umfangreich das Vorhaben wird.
    Vielleicht findet sich ja einer hier der Zeit und Lust hat mit Hilfe der DLL ein paar UDF´s zur JAVA-Steuerung zu schreiben.

  • Hallo Xenobiologist,

    RFT läuft wohl nur unter Linux. Kennst Du eine nutzerfreundliche Alternative für Windows?

    Grüße

    Cornelius

    Edit: Ich muss mich korrigieren: RFT ist auch für Windows verfügbar, kostet aber mehrere Tausend Euro. Das ist mir für diese Aufgabe zu teuer. Gibt es Alternativen?

    2 Mal editiert, zuletzt von cnolte (24. Januar 2008 um 08:57)

  • Hallo,

    inzwischen habe ich die Lösung: Screencapture und OCR - lässt sicht beides in autoit erledigen. Code dazu gibt es in diesem Forum und im amerikanischen.

    Grüße

    Cornelius