Variable durch Inhalt der Variable ersetzen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Variable durch Inhalt der Variable ersetzen

06 Sep 2014, 14:13

Ich sitze, wie es scheint, wieder einmal auf der Leitung.

Ich habe eine Funktion, die verschiedene Systemeinstellungen zurückgeben soll. Ich bekomme es aber mit der Abfrage nicht hin. Es wird immer wieder nur der Abfragestring statt der Systemeinstellung zurückgegeben, und zwar unabhängig von der Verwendung Prozentzeichen und Klammern etc. pp. Ich schaffe es nur mit einem Workaround unter Verwendung umfänglicher If-Blöcke etc. Was mache ich falsch? Wo liegt mein Fehler?

Code: Select all

StartDir := SysEntries("Startverzeichnis")
MsgBox %StartDir% ; Hier kommt immer der String "Startverzeichnis" statt "C:\Start".
Return

; Entwickelt und retourniert Systemeinstellungen
SysEntries(Abfrage)
{
   Static ProgsPath="C:\Progs"
   Static Startverzeichnis="C:\Start"
   Return %Abfrage% ; Hier sollte nicht "Startverzeichnis", sondern "C:\Start" retourniert werden.
}
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: Variable durch Inhalt der Variable ersetzen

06 Sep 2014, 15:02

Auf der Return-Seite unter Parameter findest du die folgende Erklärung:
Bekannte Einschränkung: Aus Gründen der Abwärtskompatibilität und Benutzerfreundlichkeit sind die folgenden zwei Beispiele funktionsgemäß identisch:

return MeineVar
return %MeineVar%

Das heißt, dass eine Variable, die von Prozentzeichen umschlossen ist, nicht als Ausdruck behandelt wird. Um diese Einschränkung zu umgehen, sollte es zusätzlich mit Klammern umschlossen werden, damit es unmissverständlich ein Ausdruck ist. Zum Beispiel: Return (%MeineVar%).
Also wäre das in deinem Fall:

Code: Select all

...
Return (%Abfrage%)
...
Johnny R
Posts: 348
Joined: 03 Oct 2013, 02:07

Re: Variable durch Inhalt der Variable ersetzen

06 Sep 2014, 15:07

Danke, Ragnar. Genau das war die Lösung! Und ich wollte schon aufgeben...
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Variable durch Inhalt der Variable ersetzen

06 Sep 2014, 15:31

Wäre es nicht von Anfang an einfacher gewesen es so zu machen?

Code: Select all

SysEntries:={ProgsPath:"C:\Progs",Startverzeichnis:"C:\Start"}
Msgbox % SysEntries["ProgsPath"]
Msgbox % SysEntries.Startverzeichnis
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero and 41 guests