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

Вниз

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

 
Morrison ©   (2005-03-02 23:30) [0]

Ламерский вопрос, который наверняка задавался неоднократно... Надо чтобы при попытке повторно запустить уже работающую программу, эта программа бы не запускалась... В общем, как отследить, работает ли программа в данный момент?


 
Anatoly Podgoretsky ©   (2005-03-02 23:33) [1]

Общими средствами никак, да и зачем ну запустилась, обнаружижила что она не единственная, так и прекратить безобразие, тих уйти.
Для обнаружения желательно использовать мьютексы.


 
P.N.P. ©   (2005-03-02 23:34) [2]

>наверняка задавался неоднократно
А почему, исходя из этого предположения, в FAQ не заглянуть?


 
Новичек ©   (2005-03-02 23:35) [3]

http://delphibase.spb.ru/


 
Simply Alex   (2005-03-02 23:51) [4]

Добавь в файл проекта:


var
 HM: THandle;

function IsRunning: Boolean;
begin
 HM:=OpenMutex(MUTEX_ALL_ACCESS, false, "SomeName");
 Result:=(HM <> 0);
 if (HM=0) then HM:=CreateMutex(nil, false, "SomeName")
end;


Если твоя программа запущена, то IsRunning=TRUE...


 
Morrison ©   (2005-03-03 00:09) [5]

Большое спасибо!
А где можно подробно почитать обо всем этом (всякие там THandle), желательно на русском?


 
BillyJeans   (2005-03-03 13:28) [6]

2 Simply Alex   (02.03.05 23:51) [4]

а если программа была запущена и некорректно завершена её работа, mutex то останется


 
Anatoly Podgoretsky ©   (2005-03-03 14:09) [7]

BillyJeans   (03.03.05 13:28) [6]
The system closes the handle automatically when the process terminates.


 
Digitman ©   (2005-03-03 14:28) [8]


> BillyJeans   (03.03.05 13:28) [6]


пурга.


 
Думкин ©   (2005-03-03 14:33) [9]

>  [8] Digitman ©   (03.03.05 14:28)

Дафай опять свой код с пайпами. :)


 
Digitman ©   (2005-03-03 14:36) [10]


> Думкин ©   (03.03.05 14:33) [9]


щас)

я что, издательство "Сделай сам" для самоделкиных ?)


 
Вариант ©   (2005-03-03 16:02) [11]

>Simply Alex
Я тоже советую использовать Mutex базирование. Но эффективнее его использовать так:
Добавляем в проект unit:

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 VariantProgram;

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

{$R *.RES}

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

 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.


Эффективно на 100%. Я сам использую этот метод.



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

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

Наверх




Память: 0.49 MB
Время: 0.042 c
4-1107774683
Skier
2005-02-07 14:11
2005.03.20
Как залить регион окна прозрачной кистью ?


1-1109844872
bva
2005-03-03 13:14
2005.03.20
Восстановление невидимого компонента


11-1091075128
Baloo
2004-07-29 08:25
2005.03.20
ув. В. Кладов! В элемент типа TEdit вставить понятно как, а в мно


11-1092650554
Алексей
2004-08-16 14:02
2005.03.20
Как вернуть фокус на закладки TabControl a


1-1109871255
Checist [root]
2005-03-03 20:34
2005.03.20
Нужен компонент TrayIcon