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

Вниз

Kak uznat zapushenno li konkretnoe prilozhenie??   Найти похожие ветки 

 
NeedHelp   (2005-01-29 01:08) [0]

Mastera, takoj vopras, kak s pomosh"ju programki opredelit", rabotaet to est" -->zapushen" li Reminder.exe.
Ja ispol"zuju takoj kod 4tob zapustit" programku
 path:=ExtractFileDir(application.exename);
 winexec(pchar(path+"\Reminder.exe"), 0);
no esli reminder.exe uzhe zapushen, to on zapuskaet ego e6eraz =((( a kak etogo izbezhat"??
Pomogite pozhalujsta =))
Zaranee blagodarna =))


 
Ihor Osov'yak ©   (2005-01-29 02:53) [1]

Два варианта -
первый - само приложение должно быть написано так, что позволяет запустится только одному экземпляру  вопрос подробно описан во всевозможных FAQ, в некоторых толково, в некоторых - бестолково. Возмите за основание те решения, где используется именованные обьекты ядра.

второй - запускающее приложение анализирует список процессов, для каждого процесса получает путь к бинаоному файлу и сравнивает с тем, что собираемся запускать..
 
Второй способ при определенных обстоятельствах не выдерживает критики. Единственное преимущество (но оно может стать и недостатком) - что привязывается не к процессу как таковому, а к местоположению бинарного файла..


 
GrayFace ©   (2005-01-29 05:47) [2]

3-й способ - самый простой, но самый не выдерживающий критики - искать окно.


 
PZ   (2005-01-29 07:58) [3]

По первому варианту можно делать так:

program LoadInet;

uses
 Forms,
 Dialogs,
 Windows,
 LoadInetUn in "LoadInetUn.pas" {LoadInetFrm};

{$R *.res}

begin
 // Не допустить запуск программы второй раз
 HPrevInst := FindWindow("TLoadInetFrm", Nil);
 If HPrevInst = 0 then
   begin
     Application.Initialize;
     Application.CreateForm(TLoadInetFrm, LoadInetFrm);
     Application.Run;
   end
 else
   begin
     ShowMessage("LoadInet уже запущен");
     Windows.SetFocus(HPrevInst);
     Windows.SetForeGroundWindow(HPrevInst);
   end;
end.


 
Ihor Osov'yak ©   (2005-01-29 12:42) [4]

2 [3] PZ   (29.01.05 07:58)

не в обиду - предложеный Вами способ - один из худших, который можно реализовать..
зы - я не зря упомянул именованные обьекты ядра.

Я делаю примерно так:

program RegCleaner;

uses
 windows,
 ...


var
 hSemaphore: THandle;

begin
 hSemaphore := CreateSemaphore(nil, 0, 1, "6DB73144-3018-44B9-AE43-9D220778DB91");
 { строку вида "6DB73144-3018-44B9-AE43-9D220778DB91" генерируем для каждого проекта индивидуально посредством нажания CtrlShiftG в IDE D и последуещей незначительной правки результата нажатия :-)}
  try

   if GetLastError = ERROR_ALREADY_EXISTS then
   begin
     // здесь код, переводящий на передний план уже запущенный экземпляр -      // но это уже отдельный разговор
     Exit;
   end;

   Application.Initialize;
   Application.CreateForm(....);
   Application.Run;

 finally
   ReleaseSemaphore(hSemaphore, 0, nil);
 end;

end.


 
PZ   (2005-01-29 16:11) [5]

Ihor Osov"yak ©   (29.01.05 12:42)

А чем этот способ плох? Не понимаю. Я делаю так, работает надежно, всегда определяет запущенный экземпляр программы. Сбоев не бывает. В чем же недостаток?


 
GotHelp   (2005-01-29 16:26) [6]

Ogromnoe spasibo za otveti!!! =))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
4-1103751569
bot
2004-12-23 00:39
2005.02.13
Клик по кнопке в чужом приложении


14-1106629613
Тыгыдымский конь
2005-01-25 08:06
2005.02.13
Ищу партнера


1-1106768480
Angela
2005-01-26 22:41
2005.02.13
Координаты и Panel...


3-1105534884
sergey18
2005-01-12 16:01
2005.02.13
Опять про даты в MSSQL, но другое


14-1106670254
Шишкин Илья
2005-01-25 19:24
2005.02.13
КПК в Москве





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