2016-12-28 15 views
1

Первое сообщение здесь, когда переполнение стека, я использовал форумы и скрывался некоторое время, но решил зарегистрироваться, так как моя работа теперь включает в себя гораздо больше скриптов.Autohotkey/pulovers macro creator inputbox loop error

Так что я использую Макро-Создатель Пуловера для создания сценария автошокса, и я не могу решить проблему с помощью команды InputBox.

Целью скрипта является проверка правильности ввода данных пользователя, сравнение выходной переменной с набором из 4 заданных значений. Если выходная переменная окажется недопустимой, MsgBox появится, чтобы сообщить пользователю, а затем скрипт возвращается назад к началу, чтобы они могли попробовать снова.

Проблема, с которой я сталкиваюсь, заключается в том, что скрипт зависает в команде InputBox, но только после того, как он вернулся к началу после того, как неверный символ был обнаружен с помощью ключа if.

например.

InputBox - пользователь вводит неверную переменную

появляется MsgBox

Скрипт перезагружается

InputBox - входы пользователей ДЕЙСТВИТЕЛЬНО переменных

Script висит


Вот мой код:

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 
} 

У меня есть подозрение, что проблема заключается в том, как создатель макроса, создающего макрос, формирует скрипт ahk, но у меня все идеи!

Любая помощь была бы принята с благодарностью.

Большое спасибо Дуга

ответ

0

ПОКА положение только не принимает условия, которые AutoHotkey считает выражения. IFIN - это команда, а не autohotkey выражение. От documentation для IFIN:

Операторы «между», «есть», «in» и «contains» не поддерживаются в выражениях.

Ваш код работает, если мы реорганизовать вне условие 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 
} 
+0

Спасибо Джим! Много более аккуратный код, чем у меня :) – dougc39