Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

запуск программы один раз [D6, XP]


kail ©   (2007-02-05 13:27:00) 

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


RASkov   (2007-02-06 21:06:00) [1]

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

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

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

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


Leonid Troyanovsky   (2007-02-06 11:55:00) [2]


> RASkov   (05.02.07 13:34) [5]

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


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

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

--
Regards, LVT.


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

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


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


> format c:/q ? )))


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


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

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

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


brother   (2007-02-06 09:31:00) [6]


> Neket

format c:/q ? )))


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

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

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


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


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

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


Officeman   (2007-02-05 13:35:00) [9]

в каком смыле 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;


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

> [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:00) [11]

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

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


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

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


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

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


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


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

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


Elen   (2007-02-05 13:29:00) [15]


> kail

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо