Bei Tastendruck zweite Taste gedrückt halten

Stelle Fragen zur Automatisierung von Spielen

Moderator: jNizM

StaffBull
Posts: 4
Joined: 15 Mar 2016, 04:59

Bei Tastendruck zweite Taste gedrückt halten

Post by StaffBull » 15 Mar 2016, 05:18

Hallöchen,

leider bin ich komplett neu in der Welt von AutoHotkey und habe noch nicht so ganz den Durchblick.

Ich bin auf der Suche nach einem Makro, welches mir bei Tastendruck eine zweite Taste gedrückt hält.

Genauer gesagt geht es darum: Ich habe auf Shift gebindet, dass mein Character auf der Stelle stehen bleibt.
Auf der Taste 1 habe ich einen Skill gelegt welcher dann ununterbrochen gecastet werden soll.

Quasi müsste das Macro so funktionieren, dass es mir die Taste 1 permanent gedrückt hält sobald ich Shift drücke.

Entschuldigt du etwas umständliche Beschreibung ;)


Edit: Hab jetzt ein bisschen rum gesucht und bin zu dem Entschluss gekommen.

Shift::
if (getkeystate("1"))
send,{1 up}
else
send,{1 down}
return


Passt das so? xD

User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Bei Tastendruck zweite Taste gedrückt halten

Post by nnnik » 17 Mar 2016, 05:40

Im moment spammst du die Taste 1 einfach nur und hältst sie nicht gedrückt.
Wenn es für dich funktioniert sollte es klappen.
Recommends AHK Studio

StaffBull
Posts: 4
Joined: 15 Mar 2016, 04:59

Re: Bei Tastendruck zweite Taste gedrückt halten

Post by StaffBull » 20 Mar 2016, 06:01

Leider klappt es nicht und ich bin auch nicht weiter gekommen ;)

Das Problem ist, dass ich Shift permanent gedrückt halten muss und dabei gleichzeitig noch
die Taste 1 gedrückt bleiben muss

User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Bei Tastendruck zweite Taste gedrückt halten

Post by nnnik » 20 Mar 2016, 16:46

Damit du korrekten Code erzeugen kannst musst du erstmal wissen welche Aktionen AutoHotkey ausführen kann.

Du kannst Tasten drücken und Loslassen.
Zudem kannst du Variablen setzen und vergleichen.
Je nachdem wie eine Variable gesetzt ist kannst du dann anderen Code ausführen. ;
Interessant wird es dann bei den HotKeys.
Ein Hotkey ist einfach nur ein Stück Code das ausgeführt wird sobald entsprechende Bedingungen für einen Tastendruck festgestellt werden. (z. B. Alt und Tab werden zusammen gedrückt).

Der korrekte Code wäre so etwas:

Code: Select all

Shift:: ;wird ausgeführt wenn shift gedrückt wird
A := !A ;Der Variable A wird ein Wert zugewiesen nämlich das Ergebnis von !A
;!A ist ein Befehl der besteht aus zwei Teilen einmal dem ! was soviel wie nicht bedeutet
;der zweite Teil ist wieder die Variable A
;Das nicht bezieht sich auf das A. Die Linie sagt so viel wie "A wird zu nicht A", was in diesem Fall einfach nur dafür sorgt, dass A zwischen 1 und 0 hin und her wechselt
If (A) ;Wenn A 1 ist das Ergebnis dieses If wahr wenn es 0 ist dann falsch
	Send {1 Down} ;Wenn A 1 ist dann wird die Taste 1 runtergedrückt
Else
	Send {1 Up} ;Wenn A 0 ist dann wird die Taste 1 losgelassen
return
Es ist eigentlich fast das gleiche wie dein Code, bloß das dein code eventuell komisch reagieren kann.
Teste das am besten mal in einem Text Editor. Du darfst Shift aber nur einmal kurz drücken.

In kurz:

Code: Select all

Shift::
If (A := !A)
	Send {1 Down}
Else
	Send {1 Up}
return
Wenn dieser Code in deinem Texteditor funktioniert aber nicht in deinem Spiel, dann musst du das Script eventuell als Administrator ausführen, oder eine andere Send Methode verwenden (siehe z. B. SendInput)
Recommends AHK Studio

StaffBull
Posts: 4
Joined: 15 Mar 2016, 04:59

Re: Bei Tastendruck zweite Taste gedrückt halten

Post by StaffBull » 22 Mar 2016, 13:47

Danke dir erstmal für deine Hilfe aber funktioniert leider nicht so wie ich es mir vorgestellt habe.

Das Problem an der Sache ist, dass ich Shift auch gedrückt halten muss im Spiel...nützt leider nichts wenn ich nur einmal Shift drücke und dann die 1 gehalten wird.

User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Bei Tastendruck zweite Taste gedrückt halten

Post by nnnik » 22 Mar 2016, 16:37

Ah OK
Du möchtest also, dass 1 und Shift gedrückt halten werden, während du Shift gedrückt hältst? Dann ist der Code einfacher.
Wie bereits gesagt gibt es gewisse Modifikatoren die das Verhalten von Hotkeys beeinflusst.
Normalerweise wird eine Taste die ein Hotkey ist von AutoHotkey abgefangen und nicht mehr weitergeschickt. Jedoch gibt es den Tilde Modifikator, mit dem man diese Taste auch durchlassen kann.
Zudem gibt es den UP Modifikator, der dafür sorgt, dass ein Hotkey ausgelöst wird, wenn eine Tastenkombination erst gedrückt wird und danach losgelassen wird.
(Siehe https://ragnar-f.github.io/docs/Hotkeys.htm#Symbols)

In deinem Fall könnte man diese Optionen benutzen um das zu erzeugen wie du es beschrieben hast:

Code: Select all

~Shift::Send {1 Down} ;beim runterdrücken von Shift wird die 1 gedrückt und der Tastendruck Shift wird durchgelassen
~Shift UP::Send {1 Up} ;beim loslassen von Shift wird die 1 auch losgelassen und das Shift loslassen wird auch durchgelassen
Recommends AHK Studio

Post Reply

Return to “Spiele”