Autohotkey / pulovers宏创建器输入框循环错误

时间:2016-12-28 12:02:44

标签: if-statement user-input autohotkey infinite-loop

关于堆栈溢出的第一篇文章,我一直在使用论坛并潜伏一段时间,但决定注册,因为我的工作现在涉及更多的脚本。

所以我使用Pulover的Macro Creator构建了一个自动键盘脚本,我无法理解InputBox命令的问题。

脚本的目的是错误检查用户输入,将输出变量与一组4个预定值进行比较。如果发现输出变量无效,则弹出MsgBox以通知用户,然后脚本循环回到开头,以便他们可以再试一次。

我遇到的问题是该脚本挂起在InputBox命令上,但只有在if开关检测到无效字符串后才回到起点后才会挂起。

e.g。

InputBox - 用户输入无效变量

出现MsgBox

脚本重启

InputBox - 用户输入VALID变量

脚本挂起

这是我的代码:

F8::

/*
This script asks for user input and keeps looping until the input matches the predefined valid strings.
*/

Loop
{

    InputBox, price_type, title, text, , , , , , , , RRP ; Get user input for "price_type" variable

    Sleep, 5

    StringUpper, price_type, price_type ; convert variable to uppercase to allow error checking

    Sleep, 5

    If price_type not in RRP,SALE,OFFERING,WAS ; check variable for invalid strings

        {
        MsgBox, 16, Invalid Input, Invalid Input message ; warn user that input is invalid
    }

Until, %price_type% in RRP,SALE,OFFERING,WAS ; infinite loop until variable matches valid input options
}

我怀疑这个问题与pulover的宏创建者格式化ahk脚本的方式有关,但我完全没有想法!

非常感谢任何帮助。

非常感谢 道格

1 个答案:

答案 0 :(得分:0)

UNTIL子句仅接受autohotkey认为表达式的条件。 IFIN是一个命令,而不是一个自动键表达式。来自IFIN的documentation

  

表达式不支持运算符“between”,“is”,“in”和“contains”。

如果我们使用无效的IN运算符重构WHILE子句,那么你的代码是有效的:

Loop
{
  InputBox, price_type, title, text, , , , , , , , RRP

  StringUpper, price_type, price_type

  If price_type in RRP,SALE,OFFERING,WAS
    break

  MsgBox, 16, Invalid Input, Invalid Input message
}