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

Вниз

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

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

Наверх




Память: 0.52 MB
Время: 0.061 c
15-1167650853
zayatz
2007-01-01 14:27
2007.01.21
Отказ от празднования нового года


2-1167259513
TStas
2006-12-28 01:45
2007.01.21
Как все-таки поселить программу в трей?


15-1167277841
Slider007
2006-12-28 06:50
2007.01.21
С днем рождения ! 28 декабря


5-1146734492
DimaBr
2006-05-04 13:21
2007.01.21
Удаление редактора


4-1157883308
Destroyer
2006-09-10 14:15
2007.01.21
как получить значение переменной среды?





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