Что нового

Скрипт который не дает запустить два одинаковых процесса

vipjeans

Новичок
Сообщения
14
Репутация
0
Вот решил написать скрип и застрял :stars: мне нужно что бы скрипт не разрешал запускать одинаковые процессы или .exe Если кто знает как правильно написать скиньте пож :'(
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Свои или чужие?
Для своих см. пример в справке по функции
Код:
_Singleton()
 
Автор
V

vipjeans

Новичок
Сообщения
14
Репутация
0
свои процессы. что бы не было копий программ Что то он мне не помог
Код:
_Singleton()
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
vipjeans
Что значит "не помог"? Создайте скрипт с примером из справки. Скомпилируйте скрипт в EXE. И попробуйте запустить несколько EXE подряд.
 
Автор
V

vipjeans

Новичок
Сообщения
14
Репутация
0
Код:
While   1
   If Not ProcessExists('raidcall') Then
sleep(1500)
run("raidcall.exe")
Sleep(300)
WinActivate("raidcall")
Send("vipjeans")
Send("{TAB}{ENTER}")
sleep(1000)
 EndIf
   Sleep (3000)
WEnd

Как мне сделать в этом коде что бы не запускалось два процесса Raidcall.exe что бы был ток один запущен? :'(
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
vipjeans
Например:
Код:
If UBound(ProcessList('notepad.exe')) - 1 > 1 Then
	MsgBox(0, 'Заголовок', 'Больше 1')
	; Exit ; выход
Else
	MsgBox(0, 'Заголовок', '1 или нет вообще')
EndIf

Определяем, сколько notepad.exe
 
Автор
V

vipjeans

Новичок
Сообщения
14
Репутация
0
Мне не нужно что бы оно показывало сколько процессов. Мне нужно что бы он не запускался или заменял рабочий процесс но что бы был ток в работе 1 процесс :-\
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
vipjeans
Имя процесса нужно указывать с расширением
Код:
If Not ProcessExists("raidcall.exe") Then
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Так вынести запуск программы за тело или завершай его.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
vipjeans,
Добавьте в начало скрипта что-то типа
Код:
If WinExists(@ScriptName & '{[/@$@\]}') Then Exit
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}')
скомпилируйте его и попробуйте запустить несколько копий.
 

windows

Новичок
Сообщения
15
Репутация
0
Это будет проверять свой скрипт на наличие копий, а нужно чтобы скрипт мониторил другой процесс, не свой, и если число копий больше 1, то закрывал остальные копии.
Как проверять это условие через
Код:
ProcessList ( ["name"] ) и ProcessClose(( "process")
или может есть другие варианты?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
windows [?]
а нужно чтобы скрипт мониторил другой процесс, не свой, и если число копий больше 1, то закрывал остальные копии.
А так?
Код:
HotKeySet('{Esc}', '_Exit')
AdlibRegister('_CheckProcess')

While 1
	Sleep(1000)
	ToolTip(StringFormat('%s:%s:%s', @HOUR, @MIN, @SEC), 0, 0)
WEnd

Func _CheckProcess()
	Local Static $i__Pid
	Local $s_Process = 'notepad.exe', $s_Dir = @WindowsDir, _;поставьте свои процесс(программу) и папку с программой
			$a_List
	If Not $i__Pid Then
		$i__Pid = Run($s_Dir & '\' & $s_Process)
		Return
	EndIf
	$a_List = ProcessList($s_Process)
	Switch $a_List[0][0]
		Case 0
			$i__Pid = Run($s_Dir & '\' & $s_Process)
		Case Else
			For $i = 1 To $a_List[0][0]
				If $a_List[$i][1] <> $i__Pid Then ProcessClose($a_List[$i][1])
			Next
	EndSwitch
EndFunc   ;==>_CheckProcess

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

windows

Новичок
Сообщения
15
Репутация
0
Спасибо! :beer:
Скрипт работает, сейчас попробую совместить его со своим.
Еще вопрос зачем здесь часы?
Код:
ToolTip(StringFormat('%s:%s:%s', @HOUR, @MIN, @SEC), 0, 0)

И если этот скрипт будет в папке с програмой, которую нужно мониторить, то можно указать путь?
Код:
$s_Dir = @ScriptDir
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
windows [?]
зачем здесь часы?
Пример того, как можно отслеживать процесс "параллельно" с основной работой.

можно указать путь?
Можно. В данном случае папка нужна не столько для мониторинга, сколько для запуска первого процесса.
 
Верх