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

Вниз

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

 
wer1   (2002-10-10 03:55) [0]

Мастера подскажите! Нужно запретить повторный запуск программы?
В Faq был приведен код указанный ниже однако по каким то причинам
у меня он не отрабатывает, может быть есть какие либо моменты
которые в данном коде не учтены.
procedure TForm1.FormCreate(Sender: TObject);
begin
{Проверяем есть ли указатель на предыдущую копию приложения} IF hPrevInst <> 0 THEN BEGIN
{Если есть, то выдаем сообщение и выходим}
MessageDlg("Программа уже запущена!", mtError, [mbOk], 0); Halt;
END;
{Иначе - ничего не делаем (не мешаем созданию формы)}
end;


 
Николай Быков   (2002-10-10 04:01) [1]

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

Там подоробно все расписано

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


 
wer1   (2002-10-10 04:13) [2]

Обязательно попробую следующие процедуры однако я хочу разобраться с первой из них, т.е которую я привел выше из того же FAQ.
Коль ее привели в качестве примера значит она должна работать,
а у меня она не реагируе на повторный запуск приложения, когда ставлю IF hPrevInst = 0 THEN BEGIN отрабатывает сообщение но насколько я правильно понял если =0 то это первый запуск, а
<>0 приложение уже запущено, однако именно это условие и не отрабатывает.


 
Rouse_   (2002-10-10 04:25) [3]

Вот как это реализовано в советах Озерова

В блоке begin..end модуля .dpr:



--------------------------------------------------------------------------------
begin

if HPrevInst <>0 then begin
ActivatePreviousInstance;
Halt;
end;
end;


Реализация в модуле:



--------------------------------------------------------------------------------
unit PrevInst;

interface

uses

WinProcs,
WinTypes,
SysUtils;

type
PHWnd = ^HWnd;

function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool; export;

procedure ActivatePreviousInstance;

implementation

function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool;
var

ClassName : array[0..30] of char;
begin

Result := true;
if GetWindowWord(Wnd, GWW_HINSTANCE) = HPrevInst then begin
GetClassName(Wnd, ClassName, 30);
if STRIComp(ClassName,"TApplication")=0 then begin
TargetWindow^ := Wnd;
Result := false;
end;
end;
end;

procedure ActivatePreviousInstance;
var

PrevInstWnd: HWnd;
begin

PrevInstWnd := 0;
EnumWindows(@EnumApps,LongInt(@PrevInstWnd));
if PrevInstWnd <> 0 then
if IsIconic(PrevInstWnd) then
ShowWindow(PrevInstWnd,SW_Restore)
else
BringWindowToTop(PrevInstWnd);
end;

end.


Лично я обычно использую мутексы

Желаю успехов


 
PVOzerski   (2002-10-10 04:43) [4]

hPrevinst - это наследие Win16, оставшееся для совместимости,
но фактически не функционирующее в Win32, где каждый процесс
имеет свое адресное пространство. Так что оставьте использование
hPrevinst для D1 и BPW, а в D5 используйте либо мутексы (что все рекомендуют),
либо FindWindow для окна-маркера с уникальным именем заголовка или
(что лучше) класса.


 
wer1   (2002-10-10 04:52) [5]

Я понял.Спасибо.



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

Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-68639
АлексейЦ
2002-09-30 11:20
2002.10.21
Помогите разобраться!!!!


14-68988
Igor_thief
2002-09-29 15:17
2002.10.21
ListView


1-68756
Peroon
2002-10-11 13:40
2002.10.21
Таймер


3-68646
AFrolov
2002-09-30 11:24
2002.10.21
как сортировать результаты запроса?


1-68840
arbin
2002-10-09 14:36
2002.10.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский