Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
15-1145007489
Референдум
2006-04-14 13:38
2006.05.07
Референдум


3-1141891899
Shura
2006-03-09 11:11
2006.05.07
Ошибка при удалении записи в ClientDataSet


3-1142270063
Bolek
2006-03-13 20:14
2006.05.07
ползователи и хранимые процедуры


2-1145439798
Id
2006-04-19 13:43
2006.05.07
Вставка значений из одной таблицы в другую


15-1144769258
chizra
2006-04-11 19:27
2006.05.07
Как пользоваться программой tar.exe для распаковки...




   Наверх