我如何解析函数中的变量以能够定义要发送的变量?
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
}
这是我的代码
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
}