Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Variable erstellen bei Tastendruck


  • Please log in to reply
2 replies to this topic
thefog
  • Members
  • 5 posts
  • Last active: Jul 12 2015 03:21 PM
  • Joined: 17 Jun 2015

Hi Leute,

bin seit 2 Tagen damit beschäftig, eine Variable beim Druck einer bestimmten Taste zu erstellen bzw. zu ändern und diese dann später auf ihren Inhalt abzufragen. Leider funktioniert das nicht so, wie ich es gerne hätte. Es wird immer Tooltip Nummer 3 ausgegeben, egal welche Taste ich von den 3 drücke. Hiermal ein Beispielcode:

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

~a::
NV := 1
~b::
NV := 2
~c::
NV := 3

if NV=1
	tooltip, Nummer1

if NV=2
	tooltip, Nummer2

if NV=3
	tooltip, Nummer3

Wäre echt klasse wenn ich hier ein wenig Hilfe bekommen würde denn momentan steh ich echt auf dem Schlauch.



gregster
  • Members
  • 283 posts
  • Last active: Nov 09 2015 03:08 AM
  • Joined: 19 Mar 2009

Willkommen im Forum!

Zu deinem Problem: wenn du einen Hotkey wie ~a definierst, dann kannst du das natürlich in einer einzigen, nämlich der gleichen, Zeile machen, etwa so:  

~a:: NV := 1 

Das funktioniert. Damit ist der Hotkey eindeutig definiert.

Wenn du jedoch Kommandos oder, wie hier, die Variablenzuweisung erst in die nächste(n) Zeile(n) schreibst, dann solltest du die Hotkey-Definition immer mit 'return' abschließen, da sonst auch der gesamte folgende Code durchlaufen wird (bis ein Return gefunden wird -> in diesem Fall wird also der gesamte folgende Code ausgeführt, auch die Variablenzuweisungen der Hotkeys b und c).

Drückst du bei deinem Skript von oben die Taste 'a' wird also NV zunächst auf 1 gesetzt, dann allerdings direkt auf 2 und dann auf 3. Beim Drücken von b auf 2, dann auf 3. Deswegen ist NV immer gleich 3, wenn die if-Abfragen durchgeführt werden. Also könnten die Hotkeys besser so definiert werden:
 

~a:: NV := 1
~b:: NV := 2
~c:: NV := 3

Dann ist NV wirklich gleich 1 und bleibt gleich 1, wenn du 'a' drückst.

Aber dann erfolgt eben nur diese Variablenzuweisung durch den Tastendruck und die if-Abfragen werden erst gar nicht durchlaufen, da "freistehender" Code hinter einer geschlossenen Hotkey-Definition eben nicht durchlaufen wird.

Daher könnte man beispielsweise ein Label (hier 'check' genannt) definieren, das man mit gosub anspringen kann. (Alternativ ließe sich auch eine Funktion definieren und aufrufen.) Da man hier mehr also zwei Dinge pro Hotkey tun will, kann man nicht mehr die Ein-Zeilen-Schreibweise ohne 'return' verwenden, sondern muss die mehrzeilige Methode mit 'return' verwenden:
 

~a::
NV := 1
gosub check
return

~b:: 
NV := 2
gosub check
return

~c:: 
NV := 3
gosub check
return

check:
if NV=1
	tooltip, Nummer1

else if NV=2
	tooltip, Nummer2

else if NV=3
	tooltip, Nummer3
return					; auch ein Label sollte mit return enden (mit exitapp würde das Skript dagegen bereits nach einem einzigen Tastendruck enden

(Die Verwendung von 'else if' ist hier optional, jedoch theoretisch ökonomischer, da weniger Code durchlaufen wird sobald eine der Abfragen 'wahr' ist.)

 

Viel Erfolg!



thefog
  • Members
  • 5 posts
  • Last active: Jul 12 2015 03:21 PM
  • Joined: 17 Jun 2015

Wow, danke Gregster! Hast mir wirklich sehr geholfen und jetzt habe ich das ganze auch ein wenig mehr verstanden. Echt, herzlichen Dank für deine Mühe!