Текущий архив: 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.011 c