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

Вниз

Не дать загрузить программу второй раз   Найти похожие ветки 

 
Fil ©   (2003-05-26 18:03) [0]

А знает ли кто ,как не дать загрузить программу еще раз, если она уже запущена.
Заранее спасибо!


 
MBo ©   (2003-05-26 18:05) [1]

в FAQ


 
Yanis ©   (2003-05-26 22:01) [2]


Form1.OnCreate
begin
FindWindow(и ищи свою прогу);
end;


 
Ihor Osov'yak ©   (2003-05-26 22:50) [3]

2 Yanis © (26.05.03 22:01)

Не самый оптимальный вариант, есть много недостатков. Посему см.
MBo © (26.05.03 18:05) и по ссылке обращаем внимание на осуществление сабжа с помощью именнованых объетов ядра, например, мьютексов или семафоров..


 
Soft ©   (2003-05-27 17:24) [4]

unit oneruned;

interface

implementation
uses
Windows;
var
Mutex : THandle;
MutexName : array[0..1024] of Char;

function StopLoading : boolean;
var
L,I : integer;
begin
// В качестве уникального имени мьютекса используем полный путь
// к исполняемому файлу приложения
L := GetModuleFileName(MainInstance,MutexName,SizeOf(MutexName));
// В имени мьютекса нельзя использовать обратные слэши, поэтому
// заменяем их на прямые
for I := 0 to L - 1 do
if MutexName[I] = "\" then
begin
MutexName[I] := "/";
end;
Mutex := CreateMutex(nil,false,MutexName);

Result := (Mutex = 0) or // Если мьютекс не удалось создать
(GetLastError = ERROR_ALREADY_EXISTS); // Если мьютекс уже существует
end;

initialization
if StopLoading then halt;

finalization
if Mutex <> 0 then
CloseHandle(Mutex);
end.


 
Frankenstein   (2003-05-27 18:49) [5]

Во многих библиотеках для Delphi для этой цели есть готовые компоненты, например ABC Pro, AHM Triton Tools. Компонент называется типа SingleInstance, с префиксом библиотеки - abc, ahm. Заодно и еще кума полезного (и бесполезного тоже)...


 
Polevi ©   (2003-05-27 19:41) [6]

и на форму можно кидать


 
y-soft ©   (2003-05-27 21:48) [7]

>Soft © (27.05.03 17:24)

Приятно, что Soft © цитирует статью y-soft © :))

http://www.delphimaster.ru/articles/limit.html


 
y-soft ©   (2003-05-27 22:10) [8]

>Frankenstein (27.05.03 18:49)
>Polevi © (27.05.03 19:41)

У всех подобных компонентов единственное достоинство, что "их на форму можно кидать". Почему-то их авторы не учитывают тот факт, что с момента запуска процесса приложения до момента срабатывания кода компонента происходит гигантское по меркам процессора время, т.е. вполне возможен случай, что второй экземпляр приложения будет запущен как раз в этот промежуток и... спокойно запуститься! Второе (это как раз именно то, из-за чего обычно вся проверка и затевается), что до момента создания форм происходит множество инициализаций, которые могут вызвать серьезные конфликты между экземплярами приложения.

Из этого следует, что код проверки необходимо выполнять в программе как можно раньше. Поэтому в вышеуказанной статье я и предлагаю помещать этот код в секцию initialization первого загружаемого программой модуля.

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


 
Polevi ©   (2003-05-28 09:18) [9]

y-soft © (27.05.03 22:10)
ok, ok , я вообщето шутил типа :))



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
1-20564
Arthur
2003-07-24 00:31
2003.08.07
Cписок запущенных программ


14-20811
Jean
2003-07-22 14:16
2003.08.07
Почему бы не пораскинуть мозгами?


1-20625
Zhuchok
2003-07-25 01:53
2003.08.07
TaskBar


8-20641
Alexandr B.
2003-04-16 01:37
2003.08.07
Громкость


1-20539
Borealis
2003-07-25 23:28
2003.08.07
TTreeView, StateImages, StateIndex:=0