AutoHotKey, jak przekazywać / oceniać parametry do funkcji

1

Mam problem ze zrozumieniem sposobu dostępu do parametrów w funkcjach AutoHotKey.

Na przykład ustawiłem zmienną myVar za pomocą InputBox, a następnie przekazuję ją do funkcji. Jak ocenić arg w funkcji TestFunction?

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

TestFunction(arg)
{
    MsgBox arg
    msgBox %arg%
    return %arg%
}    

Co chcę zrobić, to ustawić skrót klawiszowy, który poprosi o słowo kluczowe dla aplikacji, a następnie ocenić, co zostało wprowadzone w funkcji i uruchomić dowolną aplikację odpowiadającą temu słowu kluczowemu.

Dzięki!

Chris

GernBlandston
źródło
1
Gdy wywołujesz funkcję, nie potrzebujesz znaków procentowych wokół parametru: myNewVar := TestFunction(myVar)
Bavi_H
Bavi ma rację (powinien umieścić swoją odpowiedź w odpowiedzi): parametry wywołane potrzebą funkcji function("string") jeśli są sznurkami i po prostu function(variable) (brak znaków procentowych), jeśli są zmiennymi. Działa, jeśli po prostu usuniesz znaki procentu w trzeciej linii. Wiem, jak bardzo frustrujące mogą być znaki procentowe i znaki cudzysłowu w AHK: od czasu do czasu zabijają mnie.
Cerberus

Odpowiedzi:

2

Poprawiłem twój skrypt (tak jak zasugerowałem Bavi_H) i dodałem przykład uruchomienia aplikacji odpowiadającej słowu kluczowemu.

#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"
}
qwertzguy
źródło
1

Zasadniczo polecenia, takie jak run, %something%, różnią się od funkcji, takich jak myFunction(something). Oto kolejny przykład oparty na odpowiedzi 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%
}
ClearBlueSky85
źródło