AutoHotKey wie Parameter an Funktionen übergeben / ausgewertet werden

12858
GernBlandston

Ich habe Probleme zu verstehen, wie auf Parameter in AutoHotKey-Funktionen zugegriffen wird.

Zum Beispiel setze ich meine Variable mit der InputBox und übergebe sie dann an eine Funktion. Wie bewerte ich das Argument in der TestFunction?

#t:: inputbox myVar, What is your variable? myNewVar := TestFunction(%myVar%) MsgBox %myNewVar%  return  TestFunction(arg) { MsgBox arg msgBox %arg% return %arg% }  

Ich möchte einen Hotkey einrichten, der zur Eingabe eines Schlüsselworts für eine App auffordert. Anschließend wird ausgewertet, was in der Funktion eingegeben wird, und die App wird gestartet, die dem Schlüsselwort entspricht.

Vielen Dank!

Chris

1
Wenn Sie die Funktion aufrufen, benötigen Sie keine Prozentzeichen um den Parameter: `myNewVar: = TestFunction (myVar)` Bavi_H vor 13 Jahren 1
Bavi hat recht (er hätte seine Antwort in eine Antwort setzen sollen): Parameter, die von einer Funktion aufgerufen werden, benötigen `function (" string ")`, wenn es sich um Strings handelt, und nur 'function (variable)' (keine Prozentzeichen), wenn sie eine sind Variablen. Es funktioniert, wenn Sie nur die Prozentzeichen in Ihrer dritten Zeile entfernen. Ich weiß, wie unglaublich frustrierend Prozentzeichen und Anführungszeichen in AHK sein können: Sie bringen mich auch ab und zu um. Cerberus vor 13 Jahren 0

2 Antworten auf die Frage

1
qwertzguy

Ich habe Ihr Skript korrigiert (wie von Bavi_H vorgeschlagen) und ein Beispiel hinzugefügt, um eine Anwendung zu starten, die einem Schlüsselwort entspricht.

#t:: inputbox myVar, What is your variable? myNewVar := TestFunction(myVar) MsgBox %myNewVar%  return  TestFunction(arg) { msgBox %arg% if (arg = "calc") { run, calc.exe } else if (arg = "word") { run, winword.exe } return arg . "bob" } 
1
ClearBlueSky85

Grundsätzlich unterscheiden sich Befehle wie z. B. run, %something%von Funktionen wie z myFunction(something). Hier ist ein weiteres Beispiel, das auf der Antwort von qwertzguy basiert

#t:: ; get variable from message box inputbox myVar, What is your variable?  ; myVar DOES NOT have percents when passed to function myNewVar := TestFunction(myVar)  ; myNewVar DOES have percents when passed to command MsgBox %myNewVar%   return   TestFunction(arg) { ; command DOES have percents  MsgBox Launching: %arg%  if (arg = "calc") { ; commands use traditional variable method ; traditional method example: Var = The color is %FoundColor% ; variables are evaluated inside quotes  run, "%A_WinDir%\system32\calc.exe" } else if (arg = "word") {  ; functions need to use expression version since percents are not evaluated ; expression method example: Var := "The color is " . FoundColor ; variables are not evaluated inside quotes  EnvGet, ProgramFilesVar, ProgramFiles(x86) OfficeVersionVar := "15"  RunFunction(ProgramFilesVar . "\Microsoft Office\Office" . OfficeVersionVar . "\WINWORD.EXE")  }  return "You typed: " . arg  }    RunFunction(arg) { run, %arg% }