Programm starten und Tastenkombi ausführen

  • Hi und schonmal danke im vorraus!

    Ich möchte gerne ein Programm starten und nach dem Programmstart die Tastenkombi STRG + L ausführen.

    Run ("K8Control IO.exe")
    WinWaitActive ("K8Kontrol I0")
    Send ("{CTRL down}")
    Send ("{^L}")
    Send ("{CTRL up}")
    Sleep (20000)
    Exit

    Das Programm öffnet sich aber dann passiert nix aber In der Startleiste wird ein icon von autoit angezeigt.
    [Blockierte Grafik: http://s1.directupload.net/images/120811/uswk3tcv.png]
    Was mache ich falsch?
    Ich hoffe ihr könnt mir helfen (ich bin in der Materie noch anfänger) :)

    LG
    Lizard

    Edit: STRG + L bewirkt das ein Relais das über den Seriellen anschluss gesteuert wird angezogen wird.

    Einmal editiert, zuletzt von lizard (11. August 2012 um 15:37)

  • Hi,

    Probiere es mal so:

    [autoit]

    Run("K8Control IO.exe")
    WinWaitActive("K8Kontrol I0")
    Send("^l")

    [/autoit]

    Sehr viele Programme achten auch auf Groß- und Kleinschreibung bei Tastenkombinationen.
    Send("{CTRL down}") und Send("{CTRL up}") kannst du weglassen. {CTRL} als Send-Befehl gibt es nämlich gar nicht (nur {LCTRL} und {RCTRL}) und es wäre ja sonst auch doppelt da.
    Siehe AutoIt Hilfe.

    Edit: Das Icon im Traymenü und der AutoIt Skript sind noch 20 Sekunden aktiv, da du ja den Skript mit Sleep() warten lässt.

    2 Mal editiert, zuletzt von CyRoX (11. August 2012 um 15:44)

  • Hey,

    Danke für deine Antwort. :D

    Leider passiert hier auch nix... hm... also das Programm soll gestartet werden (was ja funktioniert) und danach soll in dem Programm STRG + L gedrückt werden, sodas das Relais anzieht.
    Ist das irgendwie anders Realisierbar?


    LG
    Lizard

  • Über die Controls des Fensters natürlich, dazu müsstest du mal z.B. ein Screenshot des Programms liefern. Dann kannst du mit ControlClick() usw. arbeiten.

    mFG

  • Ich glaube fast es liegt an dem Befehl

    WinWaitActive("K8Kontrol I0")

    Denn alles nach dem Befehl funktioniert ja nicht.
    Und es kommt mir vor als würde das Programm sthen bleiben (das oben beschriebene icon bleibt solange im Startmenü, bis ich dieses per hand beende).
    Was könnte ich bei diesem Befehl falsch gemacht haben?

  • Hi,

    Run ("K8Control IO.exe")
    WinWaitActive ("K8Kontrol IO")
    WinActivate ("K8Kontrol IO")
    WinWaitActive ("K8Kontrol IO")
    Send ("{^L}")
    Exit

    stimmt das so oder meinst du das anders? den leider wird der Befehl anscheinend wieder nicht richtig interpretiert :D Oder stimmt villeicht das "K8Kontrol IO" nicht so ganz? Muss da villeicht was anderes rein wie "K8Kontrol" :D Eigendlich sollte es doch nicht sooo kompliziert sein mit autoit ein prog zu öffnen und dann eine tasten kombi auszuführen...

  • Versuch mal statt Run(), Shellexecute und außerdem muss WinActivate vor WinWaitActive

  • Versuch mal statt Run(), Shellexecute

    Immer wieder erstaunlich wie es zu diesem Tipp kommen kann. Erstmal klappt der Programmstart laut lizard ja, also kann sein Problem auch nix mit dem Startaufruf der exe Datei zu tun haben. Zum zweiten ist shellexecute kein deut besser als run, der Hauptunterschied zwischen beiden Funktionen:

    Shellexecute öffnet eine beliebige Datei mit dem in Windows hinterlegten Standardprogramm.
    Run öffnet lediglich mit Windows ausführbare Dateien, also exe, bat, com usw.

    Will man also ein programm starten ist run völlig ausreichend. Will man hingegen eine Bilddatei mit dem Standardprogramm des Benutzers öffnen nimmt man shellexecute. Auf dem einen System wird das ganze dann mit der Windows Vorschau geöffnet, auf einem anderen System kann das Photoshop, Gimp oder was weiß ich sein. Möchte man das nicht dem Zufall überlassen ist shellexecute schonmal nicht unbedingt die erste Wahl. Letzten Endes kann man shellexecute aber natürlich auch zum öffnen von ausführbaren Dateien verwenden.


    @ lizard:

    Peethebee meinte das so:

    [autoit]


    Run ("K8Control IO.exe")
    WinWait ("K8Kontrol IO") ; wartet bis das fenster überhaupt existiert
    WinActivate ("K8Kontrol IO") ; aktiviert das Fenster (also bringt es in den Vordergrund)
    WinWaitActive ("K8Kontrol IO") ; wartet bis das Fenster aktiv ist
    ;Send ("{^L}") <-- dürfte btw falsch sein
    Send ("^l") ; <-- so müsste es passen
    Exit

    [/autoit]

    2 Mal editiert, zuletzt von misterspeed (11. August 2012 um 18:36)

  • Hi,

    Supper dank an alle die mir geholfen haben. Ich habe es leider nicht mit den eigendlich gedachten Program geschafft aber ein anderes (etwas einfacheres) Relais steuerung programm lässt sich mit autoit sehr gut steuern. Also noch mal ein dickes lob an eucht (y) :) (bei dem K8Control hätte ich warscheinlich mit dlls oder so arbeiten müssen...