Anfängerfrage zum Ausführen einer Datei

  • Mit meinem ersten kleinen Schript möchte ich möglichst mehrere Tastaturbefehle ausführen. Sieht so aus:

    Zitat

    Send("{!C}")
    Sleep(1000)
    Send("{RSHIFT}{C}")

    Hoffe das das so richtig ist. Wie führe ich das nun aber innerhalb eines Programmes aus. In meinem speziellen Fall ist das der Flugsimulator DCS.

    Der Befehl "Run() " sollte es eigentlich nicht sein. Das Programm läuft ja schon.

  • Hallo Hilmi,

    du hast dich ja schon vorgestellt und offensichtlich den teil mit den spielen und bots in den regeln gelesen.
    wenn du dir mehrere macros für ein programm basteln möchtest würde ich mal so beginnen:

    die frage ist wie viele hotkeys du brauchst und auf welche freien (gut zugängliche) tasten du das legen willst ...

  • Das mit den Bots habe ich nicht so richtig verstanden. Auf jeden Fall will ich den Simulator nicht manipulieren oder ähnliches.

    Ich will mir beim DCS -Sim den Startprozess erleichtern und natürlich Tasten einsparen. Die beiden von mir angeführten Befehle sind zwar ein Beispiel aber auch ernst gemeint. Ich will "LALT+C" und "RShift+L" mit einem Tastendruck ausführen. Wenn ich das richtig verstehe müsste das mit deinem Script funtionieren.

    Die Ausführung erfolgt der 0 im Ziffernblock. Nur passiert da nichts. Vermutlich habe ich einiges grundsätzliches überhaupt noch nicht verstanden

    Nur fehlt mir momentan das Wissen zum Thema Hotkey. Da muss ich mich erst mal einlesen.

    Wie führe ich einen Script in einer Anwendung aus.

    PS: Aus momentaner Sicht werden das vieleicht drei Hotkey werden

  • Tippt der Ziffernblock denn eine 0 wenn du ihn drücks (also ist NUM eingeschaltet) ? Ansonsten versuche es erstmal mit einem anderen Hotkey der dich nicht stört (und auch die Anwendung nicht).

  • Die Null habe ich in der Anwendung erst mal rausgenommen. Das sollte also funktionieren.

    (Ich verstehe aber nicht, woher das System weiß das es diesen Script ausführen soll. Der ist doch nicht dauerhaft aktiv und für immer mit der Null vom Ziffernblock verbunden.) Vermutlich Blödsinn. Hab den Script mal vereinfacht.

    Jetzt müsste er mir doch beim drücken der Num 0 die LCTRL und die C ausführen. Macht er nicht.

    Hab es mal ausgeführt im Editor. Da bringt er nur das C. ALso macht er nicht LCTRL+ C

    Einmal editiert, zuletzt von Hilmi (11. Dezember 2025 um 16:34)

  • schicke am besten immer das aktuelle script in code-block [<>] verpackt, dann ist es einfacher.

    um erstmal den hotkey zu prüfen kannst du zb. eine Messagebox einbauen, damit du sicher bist, dass der hotkey das macro auslöst (s.o.)
    EDIT: Sollte kein Fenster aufpoppen wenn du den Hotkey drückst dann versuche einen anderen Hotkey!

    jetzt musst du dein programm genau kennen (lernen) welche tasten es registriert. einige erkennen NUMPAD0 nicht als 0, dann kann man da macros drauflegen ...
    es kann auch sein, dass die tastendrücke eine mindestdauer haben um registriert zu werden. das habe ich mal in den obersten beiden zeilen reingesetzt (musst du ggf anpassen)

  • Bei mir geht es natürlich noch um absolute Verständnisprobleme. Hab deshalb mal die Funktion vereinfacht

    Ich will also die Taste F3 durch eine beliebige andere Taste einmalig auslösen. Das müsste ja in jedem Programm funktionieren. In meinem Totalcommander kann ich mir mit F3 den Dateiinhalt anzeigen lassen. Ich rufe also meine gespeicherte Datei xxx.au3 auf. Damit ist der Script aktiv und ich müsste mit dem Drücken der Null vom Numblock das gleiche Ergebnis erzielen als wenn ich F3 drücke. Soweit doch richtig.Oder?????

    Warum passiert das nicht. Er schreibt mir da in das untere Feld ,vom Totalcommander, !CC . Das Fenster HotkeyTest erscheint mit der Meldung "Macro ausgeführt"

  • Scheint zu funktionieren. Es kommt auch die Meldung (Fenster) zum Macro. Nur passiert in der Anwendung (DCS-Flugimulator) nichts.


    PS: Muss an der Anwendung liegen. Der Test nur mit F3 funktioniert am Totalcommander, im Simulator nicht. Im Simulator ist die Hotkeytaste nicht belegt und F3 hat eine Funktion. Müsste also was passieren.

    Einmal editiert, zuletzt von Hilmi (11. Dezember 2025 um 21:00)

  • Ist das Fenster des Simulators aktiv (also hast du vorher reingeklickt)?
    sonst empfängt es die tasten von send() nicht.
    Ansonsten versuche mal: Opt ("SendKeyDownDelay", 120)

  • Alles gemacht. Auch ("SendKeyDownDelay", 120) . Nach dem starten des Shript steht im Editor etwas.

    Bestimmt eine Meldung zur Ausführung des Shriptes : >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" /ErrorStdOut "E:\Temp\test_3.au3"

    Ansonsten keine Änderung. Keine Reaktion

    PS: MsgBox kommt auf einmal auch nicht mehr. Keine Ahnung warum. Hab nichts geändert. Neu gestartet hab ich auch.


    Jetzt was ganz verrücktes . Nachdem ich den Hotkey ausgeführt hatte kam nach einer gefühlten Ewigkeit die Reaktion und er hat F3 ausgeführt.

    2 Mal editiert, zuletzt von Hilmi (11. Dezember 2025 um 22:34)

  • das ist die standardmeldung. ist alles okay.
    du musst aber auch den code posten
    am besten im code-block (2 links vom zitat)
    sonst kann ich nicht helfen.

    da hilft nur viel testen und die übersicht behalten, welcher key gerade gedrückt ist usw...

  • Jetzt passiert wieder nichts . Am Script habe ich nichts geändert

    Der führt die F3 einfach nicht aus.

  • Das könnte durchaus am Programm selbst hängen.
    Es gibt mehrere Arten wie ein Programm Tastendrücke empfängt.
    Klassisch wären z.B. die Windows-Messages aber insbesondere Spiele nutzen auch andere Techniken wie z.B. Direct Input (gibts das noch?) oder gehen gleich auf den Raw-Input des Eingabegerätes.
    Send() nutzt intern die Windows-API-Funktion keybd_event und diese generiert eben diese Messages.

    Es kann also sein, dass der Flugsimulator diese Messages gar nicht auswertet, da er selbst anders auf Tastendrücke reagiert, bzw. eine Anti-Cheat-Engine derartige externe synthetische Messages verwirft.
    Man müsste also mal andere Methoden des Inputs probieren.
    Es gibt da z.B. noch die API-Funktion SendInput.
    Hier mal ein kleines Testskript, welches noch nicht sehr komfortabel ist aber F3 über SendInput triggern sollte:

  • Funktioniert auch nicht. Mit anderen Windowsanwendungen (Totalcommander) funktioniert es aber. Also ist der Simulator das Problem

    Einmal editiert, zuletzt von Hilmi (12. Dezember 2025 um 12:37)

  • da hast du dir ja ein hartes nüsschen für den anfang rausgesucht :S das fällt mir noch ein:
    1. Als Erstes müsstest du mal versuchen ob du nicht die F3-Taste mit einer anderen Software binden kannst (z.B. deiner Maus-Software) und ob das im Spiel funktioniert.
    2. Du solltest auch mal (falls möglich) versuchen das Spiel im Randlos oder Windows Modus zu setzen (also NICHT vollbild) ob die tasten da ankommen.
    3. Compiliere mal dieses Script zu einer .exe (mit Tools > Compile) und erstelle eine Verknüpfung auf den Desktop. Es wartet 5 Sekunden bis es F3 drückt.
    (also wenn du im Spiel bist - Randlos Modus: Auf den Desktop, die Verknüpfung klicken, zurück ins Spiel, dort mehrfach ins Fenster klicken und warten ob F3 wirkt. Danach Fenster-Moduns, dann Vollbild-Modus)

    Edit: (vergaß er):

    Code
    Sleep(5000)				; warte 5 sekunden bis ich im Anwendungsfenster bin
    Send("{F3 down}")		; drücke F3 runter
    Sleep(222)				; für 222ms
    Send("{F3 up}")			; lasse F3 los
    Exit					; ende

    Ansonsten wären es nicht mehr ganz triviale Ansätze wie Aspirinjunkie aufzeigt, ControlSend-Versuche etc. daher empfehle ich nochmal die 3 basic steps zu versuchen ob wir da nicht irgendein muster erkennen :)

  • Funktioniert mit allem nicht. Deinen Cod kann ich ja ,als Anfänger, noch gerade nachvollziehen. Das von AspirinJunkie , da ist Feierabend.

    Wie ist denn das mit diesen Befehlen, kann man damit nicht was machen. Stelle natürlich die Frage, weil ich keine Ahnung habe.

    Zitat
    Code
    IfWinExist
    WinActivate("Digital Combat Simulator")
    ControlSend("Digital Combat Simulator")

    Einmal editiert, zuletzt von Hilmi (12. Dezember 2025 um 14:05)

  • .. ja du müsstest das Windows-Handle herausfinden und dann versuchen der Anwendung direkt die Tasten zu schicken, was aber nicht immer einfach ist und vor allem nicht immer funktionieren muss.

    Hast du auch Punkt 1. versucht? Das ist wirklich wichtig, damit wir ausschließen können dass der DCS Autoit verwehrt!
    (ich hab schon öfter erlebt, dass Anwendungen Autoit-Keys blockieren/verzögern, konnte diese dann aber über 3rd Party Software senden (diese wurden akzeptiert) .. soll kein Lösungsansatz sein - nur dir evtl viel mühe ersparen!)

  • Verstehe ich nicht ganz. Gehe ich auf das Fenster vom DCS kann ich die F3 ausführen. Lege ich die F3 auf eine Mouse-Taste dann führt die die Mouse-Taste als F3 aus. Hoffe, du meinste das.