Wie am sichersten Keys senden? Controlsend oder ...?

  • Hallo
    Habe immer wieder folgendes Problem. Ich nutze Autoit oft um in irgendwelchen Programmen etwas einzutragen das ich zuvor über AutoIt kopiert oder in einer Gui erstellt habe.
    Habe sporadisch das Problem das die Daten nicht oder nicht richtig eingetragen werden.
    Habe schon mit "Send" und "SendKeepActive" sowie "controlsend" alles mögliche getestet. Es passiert trotzdem sporadisch immer wieder.
    Ich habe mal zwei unterschiedliche Beispiele angehangen in denen ich in Word in einem Formular etwas eintrage (passiert aber auch bei anderen Programmen):

    Spoiler anzeigen
    [autoit]


    Opt("WinTitleMatchMode", 2)
    $wordeingabeverzoegerung = 100
    $mbnameanfang = "Word"
    If Not WinActive($mbnameanfang,"") Then WinActivate($mbnameanfang,"")
    WinWaitActive($mbnameanfang,"")
    $handle_Word_Montagebericht = WinGetHandle($mbnameanfang,"")
    sleep(300)
    ControlSend($handle_Word_Montagebericht,"", "","Erster Text der in Word eingegeben werden soll")
    sleep($wordeingabeverzoegerung)
    ControlSend($handle_Word_Montagebericht, "", "","{tab}")
    ControlSend($handle_Word_Montagebericht,"", "","Zweiter Text der eingegeben werden soll")
    sleep($wordeingabeverzoegerung)
    ControlSend($handle_Word_Montagebericht, "", "","{tab}")

    [/autoit]


    Bei dem oben gezeigten Beispiel habe ich das Problem das aus irgendeinem Grund sporadisch von dem Eintrag die ersten Zeichen fehlen oder sogar das bei dem ersten groß geschriebenen Wort "erster" statt "Erster" eingetragen wird.

    Mein zweiter Versuch:

    Spoiler anzeigen
    [autoit]


    Opt("WinTitleMatchMode", 2)
    $wordeingabeverzoegerung = 100
    $mbnameanfang = "Word"
    If Not WinActive($mbnameanfang,"") Then WinActivate($mbnameanfang,"")
    WinWaitActive($mbnameanfang,"")
    $handle_Word_Montagebericht = WinGetHandle($mbnameanfang,"")
    sleep(300)
    ClipPut("Erster Text der in Word eingegeben werden soll")
    ControlSend($handle_Word_Montagebericht,"", "","^v")
    sleep($wordeingabeverzoegerung)
    ControlSend($handle_Word_Montagebericht, "", "","{tab}")
    sleep($wordeingabeverzoegerung)
    ClipPut("Zweiter Text der in Word eingegeben werden soll")
    ControlSend($handle_Word_Montagebericht,"", "","^v")
    sleep($wordeingabeverzoegerung)
    ControlSend($handle_Word_Montagebericht, "", "","{tab}")

    [/autoit]


    Bei diesem Beispiel habe ich das Problem das sporadisch statt dem Text nur ein "v" eingetragen wird. Also scheinbar bekommt der PC das "String" nicht mit.

    Wie macht Ihr sowas? Gibt es noch eine ganz andere Lösung?

    Gruß Autoirrer

  • Das mit dem Handle sollte kein Problem darstellen.
    AutoIt kommt damit klar.
    Ob er nun den Titel einträgt oder erst das Handle über den Fenstertitel bestimmt und dieses dann einträgt ist prinzipiell egal.
    Wenn aber ControlSend eingesetzt wird dann sollte man auch angeben welches Control aus dem Fenster gemeint ist anstatt diesen Parameter leer zu lassen.
    Sehe das wie Xeno - erstmal mit ControlSetText testen - das ist das sicherste.
    Erst wenn das nicht geht auf ControlSend oder Send ausweichen.

  • "ControlSetText" funktioniert in Word nicht (zumindest bei mir nicht in Formularen).

    Gut die ID des Controls mit angeben das mache ich jetzt auch. Allerdings ist der ganze Bearbeitungsbereich in Word eine ID.
    Irgendwie klappt das immer noch nicht. Sporadisch wird der Text immer noch falsch eingegeben.
    Muß mir glaube wohl was anderes einfallen lassen. Zumindest bei mir klappt das mit AutoIt nicht immer.
    Trotzdem Danke für die Tips.
    Gruß Autoirrer

    • Offizieller Beitrag

    Hallo

    Gibt doch in den neueren AutoIt Versionen, SendKeepActive(Title,[Text])
    Damit kannst du AutoIt befehlen, dass solange Send ausgeführt wird, er das Fenster Aktiv hält.

    Sonst gibt es auch noch die Word.au3, die auch schon mit der neusten AutoIt Version mitgeliefert wird. (Hilfe z.B. nach _WordCreate suchen)

    Mfg Spider