2017-09-20 1 views
2

Ich habe ein AutoHotkey-Skript mit SendInput, das sendet MouseClick Befehle zu schnell für mein Programm zu behandeln. Mein Skript sendet ein MouseClick, um ein Eingabefeld zu fokussieren, und beginnt dann mit der Eingabe, bevor das Feld die Fokussierung beendet.Wie füge ich eine Verzögerung zwischen SendInput-Befehlen in AutoHotkey hinzu?

Ich habe versucht mit SetKeyDelay mein Skript etwas langsamer laufen zu lassen, aber das funktioniert nicht mit SendInput.

Hinweis: SetKeyDelay wird von Send nicht befolgt; Es gibt keine Verzögerung zwischen den Tastenanschlägen in diesem Modus. Dasselbe gilt für Send, wenn der SendMode-Eingang aktiviert ist.
Documentation for SetKeyDelay

Meine aktuelle Problemumgehung ist nach jeder Eingabe Schlaf Befehle zu verwenden, aber das ist weniger als ideal.

SendMode Input 
F1:: 
    MouseClick, left, 61, 50   ; select title field 
    sleep 100      ; artificial delay to prevent misfocused inputs 

    SendInput %user_input%{Enter} ; enter job title 
    sleep 100      ; artificial delay 

    MouseClick, left, 67, 408  ; select job 
    sleep 100      ; artificial delay 
Return 

Idealerweise möchte ich eine elegantere Lösung für eine Verzögerung zwischen jedem Befehl Send Zugabe ohne manuell jedesmal, wenn ein Schlaf-Befehl.

Wie kann ich eine Verzögerung zwischen SendInput-Befehlen in AutoHotkey hinzufügen, ohne wiederholt den Ruhezustand zu verwenden?

Antwort

1

Verwenden Sie SendPlay statt SendInput.

Dieser sendet Text und Mausklicks mit einer 100 ms Verzögerung nach jedem

user_input := "hello world" 
SetMouseDelay 100, Play 
SendPlay {Click 61,50}%user_input%{enter}{click 67,408} 

Vom documentation for SendPlay klicken.

SendPlay

Hinweis: Sendplay überhaupt keine Wirkung haben können, wenn UAC aktiviert ist, auch wenn das Skript als Administrator ausgeführt wird. Weitere Informationen finden Sie unter FAQ.

Wie bei SendInput werden die Tastenanschläge von SendPlay nicht durch Tastatureingaben unterbrochen, die vom Benutzer eingegeben wurden. Wenn also der Benutzer während eines SendPlay-Vorgangs etwas eingibt, werden diese Tastenanschläge auf später verschoben.

Obwohl SendPlay erheblich langsamer als SendInput ist, ist es normalerweise schneller als der traditionelle SendEvent Modus (selbst wenn KeyDelay -1 ist).

SendPlay verwendet nicht die Standardeinstellungen von SetKeyDelay und SetMouseDelay. Stattdessen wird standardmäßig ohne Verzögerung überhaupt, die wie in den folgenden Beispielen gezeigt, geändert werden können:

SetKeyDelay, 0, 10, Play ; Note that both 0 and -1 are the same in SendPlay mode. 
SetMouseDelay, 10, Play 
+0

Mein Verständnis ist, dass nicht Send Tastatur und Mausereignisse oder Verzögerungen nicht versuchen, zu koordinieren, damit sie nutzen können, schnelle Betriebssystemaufrufe, die keine solche Unterstützung haben. –

Verwandte Themen