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

Вниз

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

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

Наверх





Память: 0.48 MB
Время: 0.055 c
2-1170743971
Максименко
2007-02-06 09:39
2007.02.25
DateTimePicker


15-1170307163
Elen
2007-02-01 08:19
2007.02.25
Как избавиться от внезапного включения компа


2-1170542958
Student_
2007-02-04 01:49
2007.02.25
Обработчик для SpeedButton


15-1169537324
MsGuns
2007-01-23 10:28
2007.02.25
Выдвижная из стола клавиатура


1-1167312885
MegaVolt
2006-12-28 16:34
2007.02.25
Работа со строками приводит к ошибкам при выделении памяти





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