![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск приложения один раз [D7, XP]
ilifant © (2006-04-17 20:00:00)Вопрос простой - как сделать чтобы приложение одновременно можно было хапустить один раз.
Wood (2006-04-19 03:34:00) [1]Этот пример я нашел здесь, на "Мастера 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://www.delphimaster.ru/cgi-bin/forum.pl?look=1&id=1000482255&n=0
только сылка не работает.
Wood (2006-04-18 15:21:00) [2]надо еще этот пример найти...
Asail (2006-04-18 12:31:00) [3]
> а если из файл-менеджера, то запускается.
> Было у кого такое же?
У меня все нормально с мутексами было. Покажи, как используешь?
RDen (2006-04-18 07:03:00) [4]> Rial
а если caption поменяется во время работы приложения?
Wood (2006-04-18 04:10:00) [5]
> я использую с мьютексами
>
я тоже пробовал использовать мьютексы (нашел пример в в FAQ), но что характерно, если приложение запускается с ярлыка, напр., на рабочем столе, то повторную копию не запустишь, а если из файл-менеджера, то запускается.
Было у кого такое же?
Desdechado (2006-04-17 20:12:00) [6]в FAQ есть несколько разных решений
я использую с мьютексами
Rial (2006-04-17 20:06:00) [7]//caption='startcaption';
const finalcaption='mycaption';
tform1.create(...);
begin
if (findwindow('form1','startcaption')<>0)then begin
showmessage('Уже есть одно!');
Exit;
end;
caption:=finalcaption;
end;
Извини за удобочитаемость