Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
15-1144916441
Rentgen
2006-04-13 12:20
2006.05.07
как узнать дату вчерашнего дня в PHP


15-1145020496
default
2006-04-14 17:14
2006.05.07
Перевод mp3 в mmf


15-1145184216
x.pro
2006-04-16 14:43
2006.05.07
Проблема с драйверами?


4-1140269229
msn777
2006-02-18 16:27
2006.05.07
Как реализовать запись на винт непрерывного потока данных


15-1145053611
Gero
2006-04-15 02:26
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский