Текущий архив: 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.48 MB
Время: 0.25 c