Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Как запретить запуск еще одного экземпляра того же приложения?   Найти похожие ветки 

 
harismatik   (2002-10-29 14:30) [0]

Смотри тему.


 
MBo ©   (2002-10-29 14:32) [1]

смотри FAQ.


 
Lony ©   (2002-10-29 14:56) [2]

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск одной копии приложения (Mutex-базированный)

Единственная функция Init_Mutex этого модуля (only_one.pas) создает мьютекс с именем, переданным в параметре mid.
Возврат: true, если мьютекс создан (запущен первый экземпляр приложения) или false, если уже имеется мьютекс с подобным именем (mid).

Особенности:
1. даже при "гибели" приложения все, относящиеся к нему мьютексы удаляются с большой степенью вероятности.
2. Желательно "отметить" приложение в системе так, как указано в примере. При таком подходе Ваше приложение почти со стапроцентной вероятностью не будет запущено два раза.

Зависимости: Windows
Автор: Роман Василенко, romix@nm.ru, Пятигорск
Copyright: Роман Василенко
Дата: 14 июня 2002 г.
***************************************************** }

unit Only_One;

interface

function Init_Mutex(mid:string):boolean;

implementation

uses Windows;

var
mut:thandle;

function mut_id(s:string):string;
var
f:integer;
begin
result:=s;
for f:=1 to length(s) do
if result[f]="\" then result[f]:="_";
end;

function Init_Mutex(mid:string):boolean;
begin
Mut := CreateMutex(nil,false,pchar(mut_id(mid)));
Result := not ((Mut = 0) or (GetLastError = ERROR_ALREADY_EXISTS));
end;

initialization
mut:=0;
finalization
if mut<>0 then CloseHandle(mut);
end.



Я применяю это следующим образом:

program MyProgram;

uses
only_one,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas" {dm: TDataModule},
Unit3 in "Unit3.pas" {Form3},


{$R *.RES}

const
UniqueString="MyProgramMutex"; {Может быть любое слово. Желательно латинскими буквами.}

begin
if not init_mutex(UniqueString) then exit; {Выходим до инициализации, если мьютекс уже есть}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(Tdm, dm);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.


Источник - http://delphibase.endimus.com/?action=viewfunc&topic=appctrl&id=10227


 
DimaK ©   (2002-11-16 22:10) [3]

var Wnd: hWnd;
Buff: array [0..127] of Char;
begin
Wnd:=GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
if (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner)=0) then
begin
GetWindowText(Wnd, buff, sizeof(buff));
if StrPas(buff)=Application.Title then
begin
MessageDlg("Программа уже загружена. Повторный запуск программы невозможен!", mtWarning, [mbOk], 0);
Halt;
end;
end;
Wnd:=GetWindow(Wnd, gw_hWndNext);
end;



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
4-87192
Ditron
2002-12-09 18:52
2003.01.27
Доступ к папкам


14-87098
KSergey
2003-01-08 16:06
2003.01.27
Вопрос видимо полного чайника по Win2k


1-86740
Vovaka
2003-01-17 10:11
2003.01.27
Кто-нибудь в тредах отправлял почту или файлы по ftp ?


1-86880
SpyX
2003-01-18 17:10
2003.01.27
Директория программы


1-86810
jen_bond
2003-01-18 23:46
2003.01.27
Технология FineReader