-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Как можно предотвратить запуск сразу нескольких копий одной программы???
Вопрос изложен в названии темы =)
|
Ответ изложен в справке...
См. _SingleTon()
|
morgan1991 |
31-03-2009 23:28 1080594 |
Creat0R, вот нарыл в справке:
Код:
#include "Misc.au3"
if _Singleton("test\test",1) = 0 Then
Msgbox(0,"Warning","An occurence of test is already running")
Exit
EndIf
Msgbox(0,"OK","the first occurence of test is running")
Не поможете разобраться? А то я ни чего не понял.
|
Функция _Singleton обращается к dll windows kernel32.dll и создает в памяти как бы метку
для порграммы с тектом "test\test".
При повторном запуске скрипта _Singleton снова создает метку
и выясняется, что такова уже есть.
Получив отказ, _Singleton обижается и возвращает нолик.
Сооственно If информирует Вас Msgbox-ом и далее закрывает
вторично запущенный скрипт... )
|
morgan1991 |
31-03-2009 23:46 1080608 |
Значит у меня чтото не так? Этот скрипт у меня всё время функция возвращает 0 выдаёт:
Цитата:
Цитата morgan1991
Msgbox(0,"Warning","An occurence of test is already running") »
|
|
Цитата:
Цитата morgan1991
Этот скрипт у меня всё время выдаёт »
|
Странно... а в процессах нет AutoIt3.exe от первых запусков?
|
morgan1991 |
31-03-2009 23:56 1080619 |
Цитата:
Цитата Creat0R
а в процессах нет AutoIt3.exe от первых запусков? »
|
нету, зато я заметил если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает.
|
Цитата:
Цитата morgan1991
если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает »
|
Значит есть уже подобная инстанция (test\test), после перезапуска системы должен и тот пример работать.
Вообще можно так использовать: _Singleton(@ScriptName, 1)
Но это привязка к имени скрипта (т.е если переименовать скрипт, то повторная копия будет запущена).
|
...иль так:
Код:
#region: - Global: Название и версия программы, ProID
Global $sProName, $sProVerNO, $sProVer, $sProNameVer, $sProIDText
$sProName = 'Test'
$sProVerNO = '0.1'
$sProVer = 'v' & $sProVerNO
$sProNameVer = $sProName & ' ' & $sProVer
$sProIDText = $sProNameVer & ' [ID] ' & $sProNameVer
#endregion
#region: - Одна копия программы
If $YesSingleton == 1 AND _Singleton($sProIDText, 1) == 0 Then _Pro_Exit()
#endregion
Func _Pro_Exit()
Exit
EndFunc
|
Время: 02:47.
© OSzone.net 2001-