Главная страница
    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.56 MB
Время: 0.033 c
4-69090
KIRILL_R
2002-09-04 18:14
2002.10.21
Копирование в буфер содержимого окна


1-68739
zam2000
2002-10-11 10:20
2002.10.21
Кто работал с Clipboard через API? Как туда положить CF_OEMTEXT


1-68733
Peroon
2002-10-11 11:16
2002.10.21
Ну совершенно идиотский вопрос.


6-68898
Алёшка
2002-08-19 19:24
2002.10.21
Как написать что-то типа прохи-сервера


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