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

Вниз

запуск программы один раз   Найти похожие ветки 

 
kail   (2007-02-05 13:27) [0]

скажите, как сделать так что бы программу можно было запустить только один раз?


 
Elen ©   (2007-02-05 13:29) [1]


> kail

Здесь это обсуждалось. Воспользуйся поиском.


 
Рамиль ©   (2007-02-05 13:30) [2]

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


 
Рамиль ©   (2007-02-05 13:30) [3]


> скажите, как сделать так что бы программу можно было запустить
> только один раз?

Или ты в смысле одной копии?
Тогда ищи поиском.


 
kail   (2007-02-05 13:33) [4]

НЕт способ есть... Поищем


 
RASkov   (2007-02-05 13:34) [5]

> [0] kail   (05.02.07 13:27)


Вопрос не правильно поставил - Надо не "запускать один раз", а чтоб один экземпляр программы работал...
Вот пара вариантов:

program Project1;

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

{$R *.RES}

var
Hd:THandle;
begin
 HD:=FindWindow("TForm1",nil);
 if Hd=0 then
 begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
 end else
 begin
 MessageBox(Hd,"Прога уже работает!","Form1",0);
 if IsIconic(Hd) then Application.Restore;
 end;
end.

№ 2

program OneCopy;
uses
 Forms, Windows,
 OneF in "OneF.pas" {Form1};

{$R *.RES}

var
 hMutex: THandle;

begin
 HMutex := CreateMutex (nil, False, "OneCopyMutex");
 if WaitForSingleObject (hMutex, 0) <> wait_TimeOut then
 begin
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
 end;
end.


 
EvChul ©   (2007-02-05 13:34) [6]

http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619824&n=15

А может надо сначала искать, а потом в форум?


 
Officeman ©   (2007-02-05 13:35) [7]

в каком смыле 1  раз?  Один раз вообще, а после убийсво hdd ?  ;)
или вы говорите о запуске только одной копии программы.
я делал так:


procedure TForm1.FormCreate(Sender: TObject);
var
Wnd : hWnd;
buff : ARRAY[0.. 127] OF Char;
begin
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN
 IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0)
 THEN BEGIN
  GetWindowText (Wnd, buff, sizeof (buff ));
  IF StrPas (buff) = Application.Title THEN
  BEGIN
   MessageDlg("Приложение уже загружено", mtWarning, [mbOk], 0);
   Halt;
  END;
 END;
 Wnd := GetWindow (Wnd, gw_hWndNext);
END;
END;


 
Elen ©   (2007-02-05 13:42) [8]


> Один раз вообще, а после убийсво hdd ?  ;)

"Научи, О великий, меня убивать hdd с одного запуска" :)


 
Neket   (2007-02-05 15:24) [9]

> Один раз вообще, а после убийсво hdd ?  ;)

Кстати интересно... Код в студию.... PLLLZZZZZ....


 
brother ©   (2007-02-06 09:31) [10]


> Neket

format c:/q ? )))


 
Алхимик ©   (2007-02-06 10:00) [11]

> [10] brother ©   (06.02.07 09:31)
>
> > Neket
>
> format c:/q ? )))

Я бы не говорил что форматирование - убийство hdd. Это скорее нокаут. :)


 
Neket   (2007-02-06 10:03) [12]


> format c:/q ? )))


Так не интересно.... ((((


 
Правильный Вася   (2007-02-06 11:12) [13]

Neket   (06.02.07 10:03) [12]
поменять местами 12 и 5 В


 
Leonid Troyanovsky ©   (2007-02-06 11:55) [14]


> RASkov   (05.02.07 13:34) [5]

> Вот пара вариантов:


Первый вариант не совсем точен, во многом из-за FindWindow.
Т.е., в основе д.б. EnumWindows + SendMessage и,
видимо, еще кое-что.

Кста, что подразумевалось под
if IsIconic(Hd) then Application.Restore;
не очень понятно.

--
Regards, LVT.


 
RASkov   (2007-02-06 21:06) [15]

> Кста, что подразумевалось под
> if IsIconic(Hd) then Application.Restore;

Да убрать ее(строчку) надо от туда, это я из старых свойх исходников выдернул...А вообще подразумевалось - если свернуто то восстановить
Но в данном месте не верно. Там вместо хендла окна, должен быть хендл Аппл.

> Первый вариант не совсем точен,

Согласен, Он мне даже и не нравится вообще, но пусть будет толчком для поиска(размышлений) автору



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

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

Наверх




Память: 0.5 MB
Время: 0.028 c
2-1170673904
bagos
2007-02-05 14:11
2007.02.25
speech


2-1170587285
Змей
2007-02-04 14:08
2007.02.25
пуск-> выполнить... запустить из edit


3-1165219124
Монг
2006-12-04 10:58
2007.02.25
Проблема с компонентом cxDBLookupComboBox.


8-1151496434
Andrey_G
2006-06-28 16:07
2007.02.25
Многопоточный звук


2-1170457963
acorables
2007-02-03 02:12
2007.02.25
Передача данных(массива) через DLL.