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

Вниз

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

 
Gia Gvatua   (2004-03-02 12:02) [0]

Хочу избежать одновременного запуска двух копий одного приложения. Написал функцию:

function  ActivatedOld(H: hWnd): Boolean;
var
 Pch: array [0..256] of char;
begin
 repeat
   H:= GetNextWindow(H, GW_HWNDPREV);
   GetWindowText(H, Pch, 254);
 until (H = 0) or (Pch = "MyForm");
 if H = 0 then Result:= False;
 if Pch = "MyForm" then Result:= True;
end;

которую вызиваю из проектного файла перед созданием всех форм так:

...
...
begin
 Application.Initialize;
 if ActivatedOld(FindWindow("TfrmMain, "MyForm")) then Exit;
 Application.CreateForm(TfrmMain, frmMain);
 Application.CreateForm(...
...
...

Запускается много копий приложения, т.е. функция всегда возвращает false.

Помогите пожалуйста


 
Kerk ©   (2004-03-02 12:04) [1]

Создавай лучше мьютекс и проверяй при старте его наличие


 
Reindeer Moss Eater ©   (2004-03-02 12:07) [2]

Запускается много копий приложения, т.е. функция всегда возвращает false.

Помогите пожалуйста


GetLastError поможет.


 
LGL   (2004-03-02 12:13) [3]

CLimitSingleInstance g_SingleInstanceObj(TEXT("{2194ABA1-BFFA-4e6b-8C26-D191BB16F9E6}"));

TMainForm *MainForm;
__fastcall TMainForm::TMainForm(TComponent* Owner)
       : TForm(Owner)
{
       if (g_SingleInstanceObj.IsAnotherInstanceRunning())
       {
               MessageDlg("Приложение уже запущено", mtInformation, TMsgDlgButtons() << mbOK, 0);
               Application->Terminate();
       }
}


 
Reindeer Moss Eater ©   (2004-03-02 12:14) [4]

Если вызов FindWindow("TfrmMain, "MyForm") находит MyForm,
то какой смысл в цикле repeat искать NextWindow и сравнивать GetWindowText опять с "MyForm"?

Я уже не говорю о безобразной работе с буфером PCh в твоем цикле


 
Reindeer Moss Eater ©   (2004-03-02 12:17) [5]

Если на первой итерации цикла GetWindowText заполнить буфер текстом "Вася Пупкин",
А на второй итерации текстом "Петя"

То в буфере окажется "Петя Пупкин"


 
[lamer]Barmaglot ©   (2004-03-02 13:18) [6]

RTFM?

http://www.delphimaster.ru/articles/limit.html


 
Brenagwynn ©   (2004-03-02 13:57) [7]

А можно и проще. При первом запуске проверить на наличие некоего глобального атома MY_SUPER_PROGRAM_BLAH_BLAH_BLAH (придумать достаточно уникальное имя :). Если такого атома нет, то добавить, а если есть, то тихо выйти.


 
Soft ©   (2004-03-03 04:00) [8]

>>[lamer]Barmaglot ©   (02.03.04 13:18) [6]

Вот это работает отлично, сам использую...


 
y-soft ©   (2004-03-03 17:47) [9]

>Brenagwynn ©   (02.03.04 13:57) [7]

Надоело уже объяснять, почему использование Global Atom плохая идея. Тоже самое о FindWindow. В ссылке [6] все объяснено и есть работающие примеры


 
AlexeyITN   (2004-03-03 17:56) [10]

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
     FlashWindow(Wnd,true);
     SetForegroundWindow(Wnd);
     Halt;
  END;
--------------------------------------
а может человеку нужен простенький работающий код, а не написание Windows2008SE :)
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;                                }


 
DillerXX ©   (2004-03-03 20:31) [11]

А чем тогда атомы плохи?


 
y-soft ©   (2004-03-03 20:57) [12]

>DillerXX ©   (03.03.04 20:31) [11]

Без явного удаления (GlobalFreeAtom) атом не удаляется до перезагрузки ОС.
Если Ваша программа будет завершена через TerminateProcess или еще как-нибудь аварийно завершится, то атом не будет удален со всеми вытекающими последствиями


 
Alexander666 ©   (2004-03-04 04:39) [13]

Атомы может и в других областях хороши, но по данному сабжу ответ уже сказан, надо использовать мьютексы (я и сам их использую), дана ссылка и все. Тем более там ВСЕ ПРОСТО!



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

Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.034 c
11-1066389651
ALEF
2003-10-17 15:20
2004.05.02
mckActionListEditor


4-1079038077
ZedeS
2004-03-11 23:47
2004.05.02
отследить запуск другой программы


1-1082105019
тихий вовочка
2004-04-16 12:43
2004.05.02
Глупый вопрос об обработке сообщений


4-1078230208
AloneAli
2004-03-02 15:23
2004.05.02
Мигание в System Tray


8-1075134301
ST
2004-01-26 19:25
2004.05.02
FFT





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