我如何解析函数中的变量以能够定义要发送的变量?

How do i parse a variable in a function to being able to define which variable to send?

这是我的代码

IniRead, custommessage1, whisperconfig.ini, messages, Message1
IniRead, custommessage2, whisperconfig.ini, messages, Message2
^NumPad1::whispermessage(1)

whispermessage(var){
finalwhisper := "custommessage" + var ;this equals custommessage1
Msgbox, %finalwhisper%
BlockInput On
SendInput ^{Enter}%finalwhisper%{Enter} ;<-- problem
BlockInput Off
return
}

所以在第一行我导入了 custommessage1 的值(可能是 "hi im henrik")。这就是我希望最终得到的输出。

在函数内部,我希望将 var(在本例中为 1)与名为 custommessage 的变量合并,结果为 custommessage1

我希望最终结果执行 SendInput %custommessage1%。

通过这种方式,我可以为多达 9 个触发器(包括变量编号)设置一个函数。

有人可以帮忙吗?我相信这很简单,但是我是这个编码的新手,所以请多多包涵。

您的函数只知道它自己的变量、您作为参数传入的变量和全局变量。

您正在尝试访问 custommessage1,它在函数之外并且不是全局的。您要么需要将所有变量设为全局变量,要么将它们传递给函数。

我建议后者,使用数组。这是一个示例,确保您是 运行 latest version of AHK 才能正常工作。

IniRead, custommessage1, whisperconfig.ini, messages, Message1
IniRead, custommessage2, whisperconfig.ini, messages, Message2

; Store all messages in an array
messageArray := [custommessage1, custommessage2]

; Pass the array and message you want to print
^NumPad1::whispermessage(messageArray, 1)

whispermessage(array, index){
    ; Store the message at the given index in 'finalwhisper'
    finalwhisper := array[index]

    Msgbox, %finalwhisper% ; Test msgbox

    ; Print the message
    BlockInput On
    SendInput ^{Enter}%finalwhisper%{Enter}
    BlockInput Off
}

或者,这超出了您的问题范围,您可以动态地从 .ini 文件加载密钥,这意味着您不必在每次添加 key/value 对时都创建新变量.

你可以这样做:

; Read all the key/value pairs for this section
IniRead, keys, whisperconfig.ini, messages
Sort, keys ; Sort the keys so that they are in order

messageArray := [] ; Init array

; Loop over the key/value pairs and store all the values
Loop, Parse, keys, `n
{
    ; Trim of the key part, and only store the value
    messageArray.insert(RegExReplace(A_LoopField, "^.+="))
}

; Pass the array and message you want to print
^NumPad1::whispermessage(messageArray, 1)

whispermessage(array, index){
    ; Store the message at the given index in 'finalwhisper'
    finalwhisper := array[index]

    Msgbox, %finalwhisper% ; Test msgbox

    ; Print the message
    BlockInput On
    SendInput ^{Enter}%finalwhisper%{Enter}
    BlockInput Off
}