SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden Topic is solved
Moderator: jNizM
SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Hallo zusammen,
ich habe eine Skriptsammlung für alltägliche Erleichterungen unter Windows mit mehreren Dutzend Befehlen.
Für einen Teil davon möchte ich jetzt die Eingabeverzögerung mittel "setKeyDelay" manuell definieren, jedoch nicht für das gesamte Skript.
Wie kann ich dies bestimmte Zeilen aktivieren und danach wieder deaktivieren?
ich habe eine Skriptsammlung für alltägliche Erleichterungen unter Windows mit mehreren Dutzend Befehlen.
Für einen Teil davon möchte ich jetzt die Eingabeverzögerung mittel "setKeyDelay" manuell definieren, jedoch nicht für das gesamte Skript.
Wie kann ich dies bestimmte Zeilen aktivieren und danach wieder deaktivieren?
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Aus der Doku:
Die interne Variable A_KeyDelay enthält die aktuelle Einstellung von Verzögerung für den Send/SendEvent-Modus. [v1.1.23+]: A_KeyDuration enthält die aktuelle Einstellung von DruckDauer, während A_KeyDelayPlay und A_KeyDurationPlay die Einstellungen für SendPlay enthalten.
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Danke und wie baue ich das grob ein? Ich bin noch absoluter Anfänger.
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Du speicherst die aktuellen Einstellung in eigenen Variablen, z.B.
Dann setzt Du Deine Einstellungen und führst den zugehörigen Code aus:
Danach setzt Du die Werte auf die vorherigen Einstellungen zurück:
Das war's!
Code: Select all
Sav_KeyDelay := A_KeyDelay
Sav_KeyDuration := A_KeyDuration
Code: Select all
SetKeyDelay, Verzögerung, Dauer
MacheDies
MacheDas
Code: Select all
SetKeyDelay, %Sav_KeyDelay%, %Sav_KeyDuration%
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Ich definiere den KeyDelay zu Beginn. Z. b: 10
Danach habe ich Deinen Code eingefügt und den KeyDelay auf 500 geändert. Und am Ende setze ich ihn wieder zurück.
Etwas scheint noch zu fehlen. Denn alles wird mit dem zuerst definierten Delay von 10 gesendet.
Danach habe ich Deinen Code eingefügt und den KeyDelay auf 500 geändert. Und am Ende setze ich ihn wieder zurück.
Etwas scheint noch zu fehlen. Denn alles wird mit dem zuerst definierten Delay von 10 gesendet.
Code: Select all
setkeydelay, 10
^1::
send hallo welt ohne key delay (10)
return
Sav_KeyDelay := A_KeyDelay
;Sav_KeyDuration := A_KeyDuration
setkeydelay, 500
^2::
send hallo welt mit key delay 500
return
SetKeyDelay, %Sav_KeyDelay%,
;%Sav_KeyDuration%
^3::
send hallo welt ohne key delay (10)
return
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Du müsstest das in Deinem Beispiel innerhalb der Hotkeyroutinen machen.
Wenn Du es aber nur für eine komplette Hotkeyroutine ändern willst, kannst Du auf das Zwischenspeichern und Zurücksetzen verzichten, weil AHK die Änderung bei Beendigung der Hotkeyroutine automatisch zurücksetzt:
Code: Select all
^2::
Sav_KeyDelay := A_KeyDelay
SetKeyDelay, 500
Send hallo welt mit key delay 500
SetKeyDelay, %Sav_KeyDelay%
Return
Code: Select all
^2::
SetKeyDelay, 500
Send hallo welt mit key delay 500
Return
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Herzlichen Dank. So funktioniert es wie gewünscht.
Im nächsten Schritt wollte ich das auch bei meiner Autokorrektur verwenden.
Beispiel: ich tippe die buchstaben "lpi" und daraus wird dann automatisch ein "überlanger Fachbegriff".
mein SetKeydelay wird aber als Fehler im Code erkannt. Ohne Setkeydelay funktioniert der Code.
Oder gibt es auch die Möglichkeit eine normale Skriptroutine durch das Eintippen von 3 Buchstaben auszulösen? Denn nach dem Fachbegriff wäre die Eingabe von weiteren Tasten (Pfeil, Enter, oder ähnliches) angedacht.
Im nächsten Schritt wollte ich das auch bei meiner Autokorrektur verwenden.
Beispiel: ich tippe die buchstaben "lpi" und daraus wird dann automatisch ein "überlanger Fachbegriff".
mein SetKeydelay wird aber als Fehler im Code erkannt. Ohne Setkeydelay funktioniert der Code.
The Following variable name contains an illegal character
"42Bodenseeschifffahrtskapitän
Code: Select all
:*:lpi::
setkeydelay, 42
(
Bodenseeschifffahrtskapitän
)
Code: Select all
lpi::
setkeydelay, 100
send Bodenseeschifffahrtskapitän
send {down}{down}{down}
send {enter}
return
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden Topic is solved
Wenn Du den Code aus dem zweiten Beispiel unter das Hotstringlabel des ersten Beispiels setzt, funktioniert es:
Alternativ (mit 'Fortsetzungsbereich'):
Code: Select all
:*:lpi::
setkeydelay, 100
send Bodenseeschifffahrtskapitän
send {down}{down}{down}
send {enter}
return
Code: Select all
:*:lpi::
SetKeyDelay, 42
Send,
(
Bodenseeschifffahrtskapitän
)
Return
Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden
Herzlichen Dank. Works like a charm! Immer wieder eine Freude wie mir hier im Forum so kompetent weitergeholfen wird.