Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

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

 
Chuk & Gek ©   (2006-12-18 17:47) [0]

Помогите пожалуйста!
Где-то на компе была информация, но найти не могу...
Лёгкий вопрос:как реализовать запуск только одной копии приложения, т.е. чтобы если программа запушена, то еще одну запустить было нельзя
Спасибо.


 
Anatoly Podgoretsky ©   (2006-12-18 17:47) [1]

> Chuk & Gek  (18.12.2006 17:47:00)  [0]

Не возможно.


 
Desdechado ©   (2006-12-18 17:49) [2]

http://www.delphimaster.ru/faq.shtml


 
Chuk & Gek ©   (2006-12-18 17:53) [3]

>>Не возможно.
Извените, но попробуйте запустить 2 винампа к примеру %)


 
Anatoly Podgoretsky ©   (2006-12-18 17:56) [4]

> Chuk & Gek  (18.12.2006 17:53:03)  [3]

А они оба запускаются, потом одна запущеная копия закрывается.
Это обман зрения.

Но если хочешь, то тебе придется писать особый драйвер ядра, или все таки согласиться с запуском двух копий.


 
Chuk & Gek ©   (2006-12-18 18:06) [5]

Вот нашел:
program Project1;

uses
 Forms,Windows,
 Unit1 in "Unit1.pas" {Form1};

{$R *.RES}

var
hwin:HWND;

begin
hwin:=FindWindow("TForm1","Hallo World!!!");
if hwin<>0 then
 begin
  SetForegroundWindow(hwin);
  Application.Terminate;
 end;

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Не работает.


 
Anatoly Podgoretsky ©   (2006-12-18 18:07) [6]

> Chuk &amp; Gek  (18.12.2006 18:06:05)  [5]

Конечно, используй мьютексы и будет тебе счастье.


 
Desdechado ©   (2006-12-18 18:07) [7]

> опробуйте запустить 2 винампа к примеру
у меня 5 штук одновременно играет
такая какофония...

ты фак-то почитай


 
Chuk &amp; Gek ©   (2006-12-18 18:09) [8]

>>у меня 5 штук одновременно играет
расскажите как!!!


 
Chuk &amp; Gek ©   (2006-12-18 18:15) [9]

Вот в факе нашел:
if FindWindow("TAppBuilder", Nil) <> 0 Then ShowMessage("Delphi and or C++ Builder is running");
переделал до:
if FindWindow("TForm1", Nil)<>0 then Application.Terminate;
И ничего!!! тупо... Я его запускаю первый раз а он сразу вырубается...


 
Chuk &amp; Gek ©   (2006-12-18 18:19) [10]

ЛЮДИ НУ НЕ БУДТЕ ТАКИМИ ВМЕСТО ЭТОЙ КУЧИ ПОСТОВ ДВАНО БЫ СМОГЛИ ПОМОЧЬ.....извините что так громко :)))))


 
Anatoly Podgoretsky ©   (2006-12-18 18:23) [11]

> Chuk &amp; Gek  (18.12.2006 18:19:10)  [10]

Не кричи, все равно советы не слушаешь.


 
Chuk &amp; Gek ©   (2006-12-18 18:25) [12]

Не ну правда Пожалуйста объясните мне тупому!!!


 
Anatoly Podgoretsky ©   (2006-12-18 18:26) [13]

> Chuk &amp; Gek  (18.12.2006 18:25:12)  [12]

FAQ читай, поиском пользуйся, по данной теме тонны информации.


 
Gero ©   (2006-12-18 18:28) [14]

CreateMutex


 
Anatoly Podgoretsky ©   (2006-12-18 18:30) [15]

> Gero  (18.12.2006 18:28:14)  [14]

Ну не хочет он мьютексов.


 
Chuk &amp; Gek ©   (2006-12-18 18:33) [16]

>Ну не хочет он мьютексов.
Если бы знать что это такое...


 
Gero ©   (2006-12-18 18:34) [17]

> [16] Chuk & Gek ©   (18.12.06 18:33)
> Если бы знать что это такое

Не расстраивайся, придет время, когда ты научишься пользоваться справкой и поисковыми системами, тогда ты сможешь узнать.


 
Virgo_Style ©   (2006-12-18 18:35) [18]

Chuk &amp; Gek ©   (18.12.06 18:15) [9]
if FindWindow("TForm1", Nil)<>0 then Application.Terminate;


Как ты думаешь, что здесь написано?


 
Chuk &amp; Gek ©   (2006-12-18 18:41) [19]

Он ищет все проги с класом TForm1 и любым заголовком и если не 0 то вырубает...


 
Ega23 ©   (2006-12-18 18:53) [20]

А если она у меня называется MainForm  ? У меня главная форма так во всех моих проектах называется. получается, что мои программы - как Кристофер Ламберт : "Должен остаться только один!"


 
Virgo_Style ©   (2006-12-18 18:59) [21]

Chuk &amp; Gek ©   (18.12.06 18:41) [19]
Точно, только не вырубает, а вырубается, ну и чем же ты недоволен?)


 
Chuk &amp; Gek ©   (2006-12-18 19:02) [22]

To Ega23: У меня тоже MainForm всегда. Это правило:) это я просто создал пновое приложение просто чтобы хотя бы сделать эту штуку. У меня на форме даже каждай Label переименован!!!
To Virgo Style: недоволен тем, что не работает!!!:)
Ну ладно спасибо всем помогли чем могли!!! модератор, закрывай ветку!


 
Ega23 ©   (2006-12-18 19:04) [23]

При старте проверяешь систему на наличие именованого Mutex. Если есть - выходишь, если нет - создаёшь именованый Mutex.


 
Loginov Dmitry ©   (2006-12-18 19:19) [24]

begin
 CreateMutex(nil, False, PChar(SStartMutexName));
 if GetLastError = ERROR_ALREADY_EXISTS then Halt;
....
end;


 
Chuk &amp; Gek ©   (2006-12-18 19:46) [25]

Спасибо


 
Правильный Вася   (2006-12-18 20:55) [26]

да-а, чукча писатель, мыслитель


 
RightD   (2006-12-19 12:08) [27]

Простите, а в каком модуле хранится CreateMutex?


 
Ega23 ©   (2006-12-19 12:17) [28]

Windows?


 
RightD   (2006-12-19 12:23) [29]

Спасибо, но на эту функцию нету в хелпе данных


 
Ega23 ©   (2006-12-19 12:30) [30]

Не там ищешь.
Поставь на неё курсор и нажми F1


 
novill ©   (2006-12-19 12:31) [31]

Это апи функция. Описана в мсдне.

Данные есть (Д6).


 
Anatoly Podgoretsky ©   (2006-12-19 13:11) [32]

> RightD  (19.12.2006 12:23:29)  [29]

> Спасибо, но на эту функцию нету в хелпе данных

Неправда


 
Loginov Dmitry ©   (2006-12-19 17:49) [33]

> но на эту функцию нету в хелпе данных


См. Windows SDK


 
Mickey74 ©   (2006-12-28 21:28) [34]

Люди!!!
А нафига вообще на форум заходить если человеку подсказать нормально не можете???


 
Правильный Вася   (2006-12-28 22:15) [35]


> Mickey74 ©   (28.12.06 21:28) [34]
с себя начни


 
orinoko   (2007-01-02 10:46) [36]

Я делаю так у себя и все довольны:

procedure TForm1.FormCreate(Sender: TObject);
var S: string;
   PrevInstWind: HWND;
begin
//Проверяем, не запущено ли уже приложение
//Запоминаем заголовок
s:=Application.Title;
//Меняем на что-то другое, чтоб FindWindow его не нашла
Application.Title:="runonce"+s;
//Ищем окно с заголовком приложения
PrevInstWind:=FindWindow(nil,pchar(s));
if PrevInstWind<>0 then
  //Если нашли, то ...
  begin
  //Запрещаем показ главной формы
  Application.ShowMainForm := false;
  //Завершаем текущее приложение
  Application.Terminate;
  //Активизируем предыдущую копию
  if IsIconic(PrevInstWind)
     then
        ShowWindow(PrevInstWind,SW_RESTORE)
     else
        SetForegroundWindow(PrevInstWind);
  //Завершаем процедуру
  exit;
  end;
//Восстанавливаем заголовок
Application.Title:=s;
//дальше пишешь что там у тебя по OnCreate должно быть
// ...
// ...
end;

Всё просто и без всяких изысков



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

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.05 c
15-1167581182
ArtemESC
2006-12-31 19:06
2007.01.21
-&amp;#8734; =>... => 1 => 2 => ... => 2006 => !! => 2007 => .... => +&amp;#8734;


15-1165922242
unknown
2006-12-12 14:17
2007.01.21
Хакерам удалось обойти активацию Windows Vista


15-1167137406
AntiUser
2006-12-26 15:50
2007.01.21
Разработчики Firefox не смогли устранить ошибки при работе в ...


2-1167185450
harusha
2006-12-27 05:10
2007.01.21
DLL


1-1164730634
Алена
2006-11-28 19:17
2007.01.21
метод TTimer