Завершить выполнение без закрытия скрипта нажатием клавиши?

Вопрос

  • В принципе, в названии все сказано! Как остановить выполнение моей горячей клавиши с помощью горячей клавиши?
  • Как мне это сделать, не закрывая скрипт?
  • Как явно установить горячую клавишу для приоритета над определенным циклом?

Объяснение

У меня есть цикл, который выполняется несколько сотен раз (код прилагается), и я хотел бы создать переключатель уничтожения. Я не хочу повторно открывать скрипт, если я остановлю его работу, и мне нужно подолгу спать, чтобы я мог дурачиться с мышью, как есть.

Я просматриваю различные страницы, такие как руководство и break.

Что я пробовал

Например, должен ли я как-то назвать свой цикл? Поскольку Break не принимает параметров, я думаю: нет возможности указать, что ломать.

Другой пример: должен ли я добавить горячую клавишу в свой цикл, чтобы сломаться? Если да, то как мне это сделать? Просто кинуть ^!p:: в гнездо под каждый хоткей? Или есть другой способ добавить к хоткею хоткей (например, с GetKeyState)?

Формат ответа

Если возможно, покажите, но не говорите свои ответы, используя следующий код:

^!i::
{
    Loop 1300
    {
        Send ^+{PrintScreen}
        Sleep 1500
        MouseClickDrag, left, 0, 100, 600, 400
        Sleep 1000
        Send 1
        Sleep 500
    }
    Return
}
^!o::
{
    Loop 1323
    {
        Send ^+{PrintScreen}
        Sleep 1500
        MouseClickDrag, left, 0, 200, 600, 400
        Sleep 1000
        Send 1
    }
    Return
}

person Wolfpack'08    schedule 20.06.2014    source источник


Ответы (1)


Если вам нужна контролируемая остановка, то есть в определенной точке сценария, вы можете использовать горячую клавишу, чтобы установить переменную и протестировать эту переменную в сценарии. Когда переменная установлена ​​и оператор IF истинен, вы сбрасываете эту переменную и выходите из цикла. В противном случае вы можете убить скрипт в произвольной точке с помощью команды перезагрузки. Таким образом, скрипт закрывается, но тут же снова открывается.

^!i::
MyStopVariable:=0 ; Set the variable to 0
Loop 1300
{
    If MyStopVariable
        Exit ; Or Break if you want to finish something of after the loop
    Send ^+{PrintScreen}
    Sleep 1500
    MouseClickDrag, left, 0, 200, 600, 400
    Sleep 1000
    If MyStopVariable
        Exit ; Or Break if you want to finish something of after the loop
    Sleep 500
}
Return

^!o::
MyStopVariable:=0 ; Set the variable to 0
Loop 1323
{
    If MyStopVariable
        Exit ; Or Break if you want to finish something of after the loop
    Send ^+{PrintScreen}
    Sleep 1500
    MouseClickDrag, left, 0, 200, 600, 400
    Sleep 1000
    If MyStopVariable
        Exit ; Or Break if you want to finish something of after the loop
    Send 1
}
Return

^!s:: ; Ctrl+Alt+s = stop
MyStopVariable:=1
Return

В качестве альтернативы вы можете использовать свой исходный код и добавить перезагрузку.

^!s:: ; Ctrl+Alt+s = stop
    Reload
Return
person Robert Ilbrink    schedule 20.06.2014
comment
Ты довольно активен на AHK. Вы дизайнер? Извините, я изначально не прикрепил код к вопросу. - person Wolfpack'08; 20.06.2014
comment
Роберт, ты потрясающий. Это замечательно. Он работает безупречно. - person Wolfpack'08; 21.06.2014