Добрый день.
Есть работающий скрипт, который ранее работал без проблем с нужной мне программой (условный process.exe).
Скрипт не мой - добрые люди подсказали.
Суть такова: process.exe периодически (хаотично, безсистемно) показывает окно с заголовком "Внимание" и с кнопками "да" и "нет".
Когда такое окно появляется, делается переход вправо на кнопку "нет" и подтверждается, после чего программа process.exe закрывается.
Процесс закрытия не быстрый, поэтому установил небольшой sleep чтобы процесс успел выгрузиться, после которого снова запускаю process.exe.
В планировщике каждые 5 минут скомпилированный скрипт запускается, и если не находит окна с заголовком "Внимание" - выгружается, а если находит такое окно - перезагружает программу, и тоже выгружается. И так каждые 5 минут. Если программа не работает 5 минут - для меня не критично, а вот если она долго не работает - это уже проблема. Таким образом нужный мне функционал с помощью этого скрипта организован и полностью меня устраивает.
Но с какого-то момента - после очередного обновления программы (она стала более прожорливой) - выгрузка процесса из памяти стала затягиваться. Причём иногда она может закрыться за 10 секунд, а иногда ей и минуты мало, а то и вовсе не выгружается из памяти - помогает только завершение процесс в диспетчере задач. В этом случае, ни один sleep не поможет.
Поэтому, я думаю правильней было бы сделать несколько циклов проверки (к примеру, 5 циклов с 20-секундными паузами между ними) присутствия в памяти процесса, после окончания которых считать такой процесс зависшим. После чего убить этот процесс и снова запустить Run("C:\process.exe").
Как организовать такую проверку в несколько циклов, чтобы в каждом цикле - если процесс ещё в памяти, перейти после ожидания к следующему циклу проверки, а если процесс уже выгрузился - завершить все циклы и сразу перейти к Run("C:\process.exe"). Но если и после 5 циклов процесс всё ещё не выгрузился - сделать ProcessClose и перейти к Run("C:\process.exe")?
Спасибо.
Есть работающий скрипт, который ранее работал без проблем с нужной мне программой (условный process.exe).
Скрипт не мой - добрые люди подсказали.
Код:
if WinExists ("Внимание") Then
WinActivate("Внимание")
send ("{right}")
send ("{enter}")
Sleep (10000)
Run("C:\process.exe")
Exit
Else
Exit
EndIf
Когда такое окно появляется, делается переход вправо на кнопку "нет" и подтверждается, после чего программа process.exe закрывается.
Процесс закрытия не быстрый, поэтому установил небольшой sleep чтобы процесс успел выгрузиться, после которого снова запускаю process.exe.
В планировщике каждые 5 минут скомпилированный скрипт запускается, и если не находит окна с заголовком "Внимание" - выгружается, а если находит такое окно - перезагружает программу, и тоже выгружается. И так каждые 5 минут. Если программа не работает 5 минут - для меня не критично, а вот если она долго не работает - это уже проблема. Таким образом нужный мне функционал с помощью этого скрипта организован и полностью меня устраивает.
Но с какого-то момента - после очередного обновления программы (она стала более прожорливой) - выгрузка процесса из памяти стала затягиваться. Причём иногда она может закрыться за 10 секунд, а иногда ей и минуты мало, а то и вовсе не выгружается из памяти - помогает только завершение процесс в диспетчере задач. В этом случае, ни один sleep не поможет.
Поэтому, я думаю правильней было бы сделать несколько циклов проверки (к примеру, 5 циклов с 20-секундными паузами между ними) присутствия в памяти процесса, после окончания которых считать такой процесс зависшим. После чего убить этот процесс и снова запустить Run("C:\process.exe").
Как организовать такую проверку в несколько циклов, чтобы в каждом цикле - если процесс ещё в памяти, перейти после ожидания к следующему циклу проверки, а если процесс уже выгрузился - завершить все циклы и сразу перейти к Run("C:\process.exe"). Но если и после 5 циклов процесс всё ещё не выгрузился - сделать ProcessClose и перейти к Run("C:\process.exe")?
Спасибо.
Последнее редактирование: