Что нового

Как сделать, чтобы не запускалось несколько экземпляров программы?

Tapok

Новичок
Сообщения
204
Репутация
0
Запущена программа (например калькулятор), известен её заголовок. Как при запуске этой же программы, с тем же заголовком закрывать первый экземпляр и запускать новый?

Именно закрыть старый экземпляр и открыть новый, а не не дать запустить еще один экземпляр.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Тут всё зависит от того, какую программу вы хотите отслеживать.
Если это стороняя программа, то ваш скрипт должен постоянно мониторить процессы. И проверять, чтобы нужный (ненужный) процесс не был запущен в двух экземплярах.
Если это программа которая запускается из вашего скрипта, то просто проверяете, есть ли уже запущеная программа. И если есть, то выполняете нужные вам действия.
Если же скрипт сам является программой, которая должна быть в одном экземпляре, то в первых строчках пишите проверку на наличие запущенного процесса с подобным названием. И если есть, то выполняете нужные вам действия.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Сторонняя программа запускает мой exe, сделанный в Autoit (его могу менять). Заголовок окна exe известен, надо убивать тот exe, что уже запущен и запускать новый.

edyapd сказал(а):
Если это стороняя программа, то ваш скрипт должен постоянно мониторить процессы. И проверять, чтобы нужный (ненужный) процесс не был запущен в двух экземплярах.
Как это сделать? :-\
Как остановить процесс (закрыть программу) с известными данными и с известным местом запуска на диске?

Грубо говоря, чужая (не Autoit) программа (но я могу в ней все менять) запускает калькулятор с цифрой 1, потом запускает калькулятор с цифрой 2, перед этим запуском надо первое окно (процесс) калькулятора закрыть.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok
Когда вы уже соизволите заглянуть в справку?!
Код:
ProcessClose
ProcessExists
ProcessGetStats
ProcessList
ProcessSetPriority
ProcessWait
ProcessWaitClose
 
Автор
T

Tapok

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
буду разбираться!

Волк и телёнок сказал(а):
Ну вот то-то, а то все "мама, мама"!

она очень большая

Операция «Ы» сказал(а):
Отвечаю на 1 -й вопрос 7-го билета.
В основу работы синхрофазотрона
положен принцип ускорения заряженных
частиц магнитным полем.
...полем. Идем дальше.
Код:
ProcessList
ProcessClose
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Tapok сказал(а):
надо убивать тот exe, что уже запущен и запускать новый
Обычно делается все наоборот, старая программа продолжает работать, а запуск новой блокируется.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
как-то вот так:
Код:
If ProcessExists("1.exe") Then 
    $iPID = ProcessExists("1.exe")
    ProcessClose ($iPID)
EndIf
RUN(@ScriptDir & '\1.exe')

все работает.
Единственное, что в трее иконки программы 1.exe копятся, но при наведении на них мышью, исчезают.

Yashied сказал(а):
Обычно делается все наоборот, старая программа продолжает работать, а запуск новой блокируется.
Может (скорее всего) я коряво делаю и можно по-другому...
Программа "1.exe" выводит на экран SplashTextOn, потом, когда нужно вывести новую инфу, "1.exe" удаляется, выводится новое окно и т.д.
Я не знаю, можно ли сделать из SplashTextOn нечто на подобие консоли, чтобы она висела всегда и в нее выводить, т.к. по-моему SplashTextOn предусматривает наличие Sleep(), а когда будет следующий вызов "1.exe" не известно.

Желательно, конечно, чтобы это окно постоянно висело и в нем появлялась новая инфа, сейчас же оно появляется, закрывается.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
можно ли сделать из SplashTextOn нечто на подобие консоли
Код:
$i = 1
HotKeySet('q', '_Exit')

SplashTextOn('test', '', -1, -1, -1, -1, 4, "")

While 1
	If $i > 19 Then
		ControlSetText('test', '', 'Static1', '')
		$i = 1
	EndIf
	ControlSetText('test', '', 'Static1', ControlGetText('test', '', 'Static1') & 'Time: ' & StringFormat('%02i:%02i:%02i', @HOUR, @MIN, @SEC) & @CR)
	Sleep(1000)
	$i += 1
WEnd

Func _Exit()
	Exit
EndFunc
 
Верх