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

Вниз

Запуск приложения один раз   Найти похожие ветки 

 
ilifant   (2006-04-17 20:00) [0]

Вопрос простой - как сделать чтобы приложение одновременно можно было хапустить один раз.


 
Rial ©   (2006-04-17 20:06) [1]

//caption="startcaption";

const finalcaption="mycaption";

tform1.create(...);
begin
if (findwindow("form1","startcaption")<>0)then begin
showmessage("Уже есть одно!");
Exit;
end;
caption:=finalcaption;
end;

Извини за удобочитаемость


 
Desdechado ©   (2006-04-17 20:12) [2]

в FAQ есть несколько разных решений
я использую с мьютексами


 
Wood   (2006-04-18 04:10) [3]


> я использую с мьютексами
>

я тоже пробовал использовать мьютексы (нашел пример в в FAQ), но что характерно, если приложение запускается с ярлыка, напр., на рабочем столе, то повторную копию не запустишь, а если из файл-менеджера, то запускается.
Было у кого такое же?


 
RDen   (2006-04-18 07:03) [4]

> Rial

а если caption поменяется во время работы приложения?


 
Asail   (2006-04-18 12:31) [5]


> а если из файл-менеджера, то запускается.
> Было у кого такое же?

У меня все нормально с мутексами было. Покажи, как используешь?


 
Wood   (2006-04-18 15:21) [6]

надо еще этот пример найти...


 
Wood   (2006-04-19 03:34) [7]

Этот пример я нашел здесь, на "Мастера Delphi"

program MyProgram;
uses
 OneHinst;  
 Windows,
 Forms,
 MyUnit in "MyUnit.pas" {Form1};

{$R *.RES}

begin
   Application.Initialize;  
   Application.CreateForm(TForm1, Form1);
   Application.Run;
end.

unit OneHinst;
interface

implementation
uses
 Windows;
var
 Mutex : THandle;
 MutexName : array[0..255] 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;

procedure ShowErrMsg;
const
 PROGRAM_ALREADY_RUN = "Невозможно запустить программу";
begin
 MessageBox(0,PROGRAM_ALREADY_RUN,MutexName, MB_ICONSTOP or MB_OK);
end;

initialization
 if StopLoading then
 begin
   ShowErrMsg;
   // Так как никаких инициализаций еще не производилось, то
   // спокойно используем для завершения программы Halt -
   // finalization все равно выполнится
   halt;
 end;
finalization
 if Mutex <> 0 then
   CloseHandle(Mutex);
end.


обсуждения были здесь:
http://delphimaster.net/view/1-1000482255/
только сылка не работает.



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
3-1142264205
Ega23
2006-03-13 18:36
2006.05.07
Размер таблицы в памяти


3-1142272988
kilonet
2006-03-13 21:03
2006.05.07
проблема подсоединения к MySQL через dbExpress


1-1144047438
Mac Raven
2006-04-03 10:57
2006.05.07
не работают формулы SpreedSheetа для OWC


15-1145131202
Wog
2006-04-16 00:00
2006.05.07
Кнопка произвольной формы


15-1145081797
Kolan
2006-04-15 10:16
2006.05.07
Как в Async Professional сделана работа с RS485