Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Прдотвращение второга запуска.


Автор: _Bla_Bla_Bla_ 4.9.2002, 23:04
Как предотвратить запуск второй копии программы не имеющей формы? Приложение написано на чистом API.

Вот кусок кода программы:
Код
begin
FillChar(WndClass, SizeOf(WndClass), 0);
 with WndClass do begin
  hInstance      := SysInit.hInstance;
  lpszClassName  := sClassName;
  lpfnWndProc    := @WindowProc;
 end;
  RegisterClass(WndClass);
  hWnd := CreateWindow(sClassName, '', 0, 0, 0, 0, 0, 0, 0, hInstance, NIL);
 if hWnd = 0 then begin
  MessageBox(0, 'Initialisation failed', NIL, ID_OK);
  Exit;
 end;
 //Регистрация сообщения о перезапуске Explorer`а
 TaskBarCreated := RegisterWindowMessage('TaskbarCreated');
 //Создание значка
 CreateTaskBarIcon;
 //Скрываем окно
 ShowWindow(hWnd, SW_HIDE);
//Цикл обработки сообщений
repeat
 waitMessage;
  while GetMessage(Msg, 0, 0, 0) do begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
  end;
 //Убираем за собой значок
 TaskBarDeleteIcon(hWnd, ICON_ID);
 Halt(Msg.wParam);
end.

Автор: adminlion 5.9.2002, 03:04
С помощью мъютекса так называемого. Если товя прога в памяти, мхютекс запуск не позволит

Автор: FdX 5.9.2002, 23:16
Да... Ну а если нужен пример кода, то вот:
Код

var
HMutex:THandle;
begin
HMutex:=CreateMutex(nil,false,'MyCoolMutex');
if WaitForSingleObject(HMutex,0)=WAIT_TIMEOUT then
 ExitProcess(0);
end;

Автор: Ampersand 6.9.2002, 15:56
Или древний способ - при запуске создаешь какой-нить файл, при выходе убиваешь. Если прога при старте найдет этот файл - значит, она уже запущена :).

Автор: Vit 6.9.2002, 22:52
Цитата(Ampersand @ 05.9.2002, 23:56)
Или древний способ - при запуске создаешь какой-нить файл, при выходе убиваешь. Если прога при старте найдет этот файл - значит, она уже запущена :).

Так не пойдёт - я убил твою программу через Task Manager и теперь её никогда нельзя будет запустить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)