Что нового

Как остановить скрипт?

Tapok

Новичок
Сообщения
204
Репутация
0
Как остановить скрипт, если Ctrl-Break не помогает, а в скрипте длительный цикл?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
HotKeySet('{ESC}','_out');клавиша выхода - Esc
While 1
	Sleep(10)
WEnd
Func _out()
	Exit
EndFunc
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Внизу в трее рядом с часами отображается значёк скрипта. Нажми на него и появится такое меню:
menu.jpg

В этом меню для выхода нажми "Exit",
а для того, чтобы поставить скрипт на паузу или снять с паузы нажми "Script Paused".
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Это все хорошо, но если скрипт использует передвижения мыши, то как быть? :smile:

joiner, спасибо, проверю :smile:
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Слегка модифицировал этот вариант. У меня на некоторых скриптах продолжали выполняться запущенные функции и результат типа двоил. Было заметно при выводе, напр, в консоль. И не только. Решил так:
Код:
Func _out()
Local $aData = _WinAPI_EnumChildProcess(_WinAPI_GetParentProcess())
ProcessClose($aData[1][1])
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Это ничего не решает, $aData[1][1] будет возвращать имя текущего процесса, уже тогда лучше брать $aData[1][0] (PID процесса), но тут не нужны WinAPI, достаточно просто использовать @AutoItPID.
И кстати для имени текущего процесса тоже не нужно использовать WinAPI, можно использовать это: StringRegExp(@AutoItExe, '\\([^\\]+)$', 3)[0]
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Можно сделать вот такой "хук" чтобы позволить прибивать собственный процесс по г. клавише:

Код:
#pragma compile(AutoItExecuteAllowed, True)

_HotKeySetMyKiller('^q')

MsgBox(64, @ScriptName, 'Press <CTRL + Q> to kill me!')

Func _HotKeySetMyKiller($sHotkey = '{ESC}')
    Local $sKiller_File = @TempDir & '\~MyKiller.tmp'
  
    Local $sSrc = _
        '#NoTrayIcon' & @CRLF & _
        'HotKeySet("' & $sHotkey & '", "_Kill")' & @CRLF & _
        'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
        '    Sleep(10)' & @CRLF & _
        'WEnd' & @CRLF & _
        'FileDelete("' & $sKiller_File & '")' & @CRLF & _
        'Func _Kill()' & @CRLF & _
        '    ProcessClose(' & @AutoItPID & ')' & @CRLF & _
        'EndFunc'
  
    Local $hFile = FileOpen($sKiller_File, 2)
    FileWrite($hFile, $sSrc)
    FileClose($hFile)
  
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sKiller_File & '"')
EndFunc
 
Последнее редактирование:

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Можно сделать вот такой "хук" чтобы позволить прибивать собственный процесс по г. клавише:
Не могу разобраться. Должно быть прибивание процесса по нажатию Cntrl+Q? Если да, то у меня почему-то не работает. По ESC закрывается окно сообщения и все, скрипт продолжает работать (если после функции было прописано что-то ещё). Или вместо @AutoItPID нужно было подставлять свой процесс?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Должно быть прибивание процесса по нажатию Cntrl+Q?
Да, собственного процесса (тот откуда эта функция запущена).

у меня почему-то не работает
Забыл указать, что это сработает только с #pragma compile(AutoItExecuteAllowed, True), по умолчанию (если не указано) оно включено.
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Да, собственного процесса
Странно. Оставил только ваш код. Ради контроля вписал вывод в консоль $sKiller_File. Окошко с надписью 'Press <CTRL + Q> to kill me!' появляется. При этом в консоли выводится путь $sKiller_File. Значит функция запущена, но на на это сочетание не реагирует. И в заглавии окошка правильно имя скрипта отображает.
Опять же, ради эксперимента пробовал делать вызов функции и как у вас до появления окошка, и после. Менял сочетание и с маленькой q и с большой Q
Пробовал присвоить $sHotkey = '{ESC}' вместо esc $sHotkey = '{^q}' - тоже без результата.
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Как бы да. Вообще-то и в первом же варианте у вас оно так и было. Специально сравнивал строки.
Но вот пришел домой и ничего не меняя по инерции ещё раз проверил и все сработало. Так-то я обычно на работе autoit занимаюсь. Подожду до выходных и на работе проверю ещё раз. Самому странно стало. Может играет роль язык по умолчанию? На работе украинский, дома - англ. Другой разницы я не вижу. Ну ещё буква флэшки, но так и переменные соответствующие. И на работе по умолчанию под админом.
Сообщение автоматически объединено:

Перепроверил на работе. Пока стоял язык ввода по умолчанию не англ, сочетание не срабатывало. Поставил по умолчанию язык ввода англ и все заработало.
 
Последнее редактирование:

AltaiR

Новичок
Сообщения
2
Репутация
0
Спасибо. Работает. Нужно только, чтобы: английская раскладка + включен Caps Lock
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Странно. Оставил только ваш код. Ради контроля вписал вывод в консоль $sKiller_File. Окошко с надписью 'Press <CTRL + Q> to kill me!' появляется. При этом в консоли выводится путь $sKiller_File. Значит функция запущена, но на на это сочетание не реагирует. И в заглавии окошка правильно имя скрипта отображает.
Опять же, ради эксперимента пробовал делать вызов функции и как у вас до появления окошка, и после. Менял сочетание и с маленькой q и с большой Q
Пробовал присвоить $sHotkey = '{ESC}' вместо esc $sHotkey = '{^q}' - тоже без результата.

у меня работает
Код:
HotKeySet('{ESC}', 'End')

While Sleep(100)
WEnd


Func End()
    Exit
EndFunc
 
Верх