AutoHotKey как передавать / оценивать параметры в функции

12785
GernBlandston

У меня проблемы с пониманием того, как параметры доступны в функциях AutoHotKey.

Например, я устанавливаю переменную myVar с помощью InputBox, а затем передаю ее функции. Как мне оценить arg в TestFunction?

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

Я хочу настроить горячую клавишу, которая будет запрашивать ключевое слово для приложения, затем оценивать то, что введено в функцию, и запускать любое приложение, соответствующее этому ключевому слову.

Спасибо!

Крис

1
Когда вы вызываете функцию, вам не нужны знаки процента вокруг параметра: `myNewVar: = TestFunction (myVar)` Bavi_H 13 лет назад 1
Бави прав (он должен был поставить свой ответ в ответе): параметры, вызываемые функцией, должны `function (" string ")`, если они являются строками, и просто `function (variable)` (без знаков процента), если они переменные. Это работает, если вы просто удалите знаки процента в третьей строке. Я знаю, как невероятно расстраивающие процентные знаки и кавычки могут быть в AHK: они тоже время от времени убивают меня. Cerberus 13 лет назад 0

2 ответа на вопрос

1
qwertzguy

Я исправил ваш скрипт (как предложил Bavi_H) и добавил пример для запуска приложения, соответствующего ключевому слову.

#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

В основном команды, такие как run, %something%, отличаются от функций, таких как myFunction(something). Вот еще один пример, основанный на ответе qwertzguy

#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% } 

Похожие вопросы