SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Kreon77
Posts: 26
Joined: 18 Feb 2022, 14:53

SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by Kreon77 » 22 Mar 2023, 05:13

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?

just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by just me » 22 Mar 2023, 05:20

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.

Kreon77
Posts: 26
Joined: 18 Feb 2022, 14:53

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by Kreon77 » 22 Mar 2023, 05:40

Danke und wie baue ich das grob ein? Ich bin noch absoluter Anfänger.

just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by just me » 22 Mar 2023, 08:29

Du speicherst die aktuellen Einstellung in eigenen Variablen, z.B.

Code: Select all

Sav_KeyDelay := A_KeyDelay
Sav_KeyDuration := A_KeyDuration
Dann setzt Du Deine Einstellungen und führst den zugehörigen Code aus:

Code: Select all

SetKeyDelay, Verzögerung, Dauer
MacheDies
MacheDas
Danach setzt Du die Werte auf die vorherigen Einstellungen zurück:

Code: Select all

SetKeyDelay, %Sav_KeyDelay%, %Sav_KeyDuration%
Das war's!

Kreon77
Posts: 26
Joined: 18 Feb 2022, 14:53

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by Kreon77 » 22 Mar 2023, 09:41

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.

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

just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by just me » 23 Mar 2023, 03:26

Du müsstest das in Deinem Beispiel innerhalb der Hotkeyroutinen machen.

Code: Select all

^2::
Sav_KeyDelay := A_KeyDelay
SetKeyDelay, 500
Send hallo welt mit key delay 500
SetKeyDelay, %Sav_KeyDelay%
Return
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::
SetKeyDelay, 500
Send hallo welt mit key delay 500
Return

Kreon77
Posts: 26
Joined: 18 Feb 2022, 14:53

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by Kreon77 » 23 Mar 2023, 04:00

Herzlichen Dank. So funktioniert es wie gewünscht. :bravo:

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
)
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.

Code: Select all

lpi::
setkeydelay, 100
send Bodenseeschifffahrtskapitän
send {down}{down}{down}
send {enter}
return

just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden  Topic is solved

Post by just me » 23 Mar 2023, 05:01

Wenn Du den Code aus dem zweiten Beispiel unter das Hotstringlabel des ersten Beispiels setzt, funktioniert es:

Code: Select all

:*:lpi::
setkeydelay, 100
send Bodenseeschifffahrtskapitän
send {down}{down}{down}
send {enter}
return
Alternativ (mit 'Fortsetzungsbereich'):

Code: Select all

:*:lpi::
SetKeyDelay, 42
Send,
(
Bodenseeschifffahrtskapitän
)
Return

Kreon77
Posts: 26
Joined: 18 Feb 2022, 14:53

Re: SetKeyDelay innerhalb eines Skripts verwenden und wieder beenden

Post by Kreon77 » 28 Mar 2023, 05:17

Herzlichen Dank. Works like a charm! Immer wieder eine Freude wie mir hier im Forum so kompetent weitergeholfen wird. :bravo: :bravo: :bravo:

Post Reply

Return to “Ich brauche Hilfe”