Форум: "WinAPI";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизЗакрытие другой копии программы. Найти похожие ветки
← →
Petrovich (2008-04-15 15:01) [0]Ситуация:
Есть софтинка на Дельфи7, которая при попытке повторного запуска говорит, что уже запущена копия и вторая копия не стартует. Добились этого таким образом:
const
UNIQUE_NAME = "TEST_SOFT_THE_UNIQUE_MUTEX_TO_PREVENT_MULTIPLE_INSTANCES";
...
if OpenMutex(MUTEX_MODIFY_STATE, False, UNIQUE_NAME) = 0 then
MuGuard := CreateMutex(nil, False, UNIQUE_NAME)
else begin
LogWrite("Попытка повторного запуска!");
Appplication.Terminate;
end;
...
Теперь надо при потытке повторного запуска не только вторую копию закрывать, но и первую, ранее запущенную!
← →
Сергей М. © (2008-04-15 16:43) [1]Разрешаем, если надо)
← →
tesseract © (2008-04-15 17:11) [2]Заводишь сообщение своё, по нему делаешь выход из программы, при старте если мутекс занят - рассылаешь рупорным методом.
← →
SergeyIT © (2008-04-15 18:45) [3]> Appplication.Terminate;
а это здесь зачем?
где-то так:
begin
CreateMutex(nil, TRUE, "TEST_SOFT_XXXXXXX_INSTANCES");
if GetLastError = ERROR_ALREADY_EXISTS then
begin
h := FindWindow("TMainXXX", nil);
if h <> 0 then
SendMessage(h, WM_USER + 666, 0, 0); //убить приложение
end
else
begin
Application.Initialize;
Application.CreateForm(TMainXXX, Main);
Application.Run;
end;
end.
И в коде приложения обработать сообщение WM_USER + 666, правильно завершить приложение.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c