Форум: "Система";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
ВнизНе дать загрузить программу второй раз Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c