Главная страница
    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.011 c
5-1130827877
JohnKorsh
2005-11-01 09:51
2006.05.07
Как позиционировать курсор в Memo и в RichEdit?


15-1144644621
TUser
2006-04-10 08:50
2006.05.07
Все будет хорошо ...


2-1145516327
Сергей И
2006-04-20 10:58
2006.05.07
Может кто подскажет как произвести обратный отсчет времени


5-1130836925
Priest
2005-11-01 12:22
2006.05.07
Оповещение об изменении свойства


2-1145438617
ZZZ_ZZZ
2006-04-19 13:23
2006.05.07
Перемещение указателя в текстовом файле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский