Что нового

Как сделать чтобы запускалась только одна копия скрипта?

agikon

Знающий
Сообщения
789
Репутация
17
задача описана в заголовке.
поиск по форуму ничего не дал.
поисковая фраза была "одна копия программы" и ничего толкового..
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Можно добавить флажок в реестр и при запуске программы, считывать этот флажок.
Примерно так :

Код:
OnAutoItExitRegister("_Check")

If RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey") = 1 Then
    MsgBox(16,"Error","Программа  уже запущена") 
   OnAutoItExitUnregister("_Check")
Exit  
  Else
    RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey", "REG_SZ", "1")
EndIf

$hWnd = GUICreate("My GUI ")
GUISetState()

While 1
    If  GUIGetMsg()= -3 Then Exit
WEnd

Func _Check ()
RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey", "REG_SZ", "0")
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
agikon,
Код:
;1:
Global $sTitleScript = @ScriptName & '{[/@$@\]}'
If WinExists($sTitleScript) Then Exit
AutoItWinSetTitle($sTitleScript)
;-------------------
;2:
#include <Misc.au3>
_Singleton(@ScriptName)
;-------------------
;3:
Global Const $MUTEX_MODIFY_STATE = 0x1F0001
$hMutex = DllCall("kernel32.dll", "hwnd", "OpenMutex", "int", $MUTEX_MODIFY_STATE, "int", False, "str", @ScriptName)
If $hMutex[0] Then
	$hWnd = WinGetHandle(@ScriptName)
	WinSetState($hWnd, "", @SW_RESTORE)
	DllCall("user32.dll", "int", "SetForegroundWindow", "hwnd", $hWnd)
	Exit
EndIf
$hMutex = DllCall("kernel32.dll", "hwnd", "CreateMutex", "int", 0, "int", False, "str", @ScriptName)
;-------------------
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
agikon [?]
поисковая фраза была "одна копия программы" и ничего толкового..
опять ложь, именно по этой поисковой фразе я опять же вышел на ту же тему...
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
точто!
извиняюсь что-то проглючило меня не увидел.
извиняюсь.
спасибо что сказали.
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
 
Верх