Вопросы и Ответы
44. Как определить работает ли уже данное приложение или это первая его копия?
В Delphi 2.0 не поддерживается переменная hPrevInst (см. "Вопрос и Ответ 17") и определение первая это копия приложения или нет становится нетривиальной задачей.
Наиболее простой путь - перебор всех окон и при совпадении заголовка окна с Application.Title считать, что приложение уже запущено. Единственное, необходимо помнить, что в момент проверки Вы обнаружите и собственное окно (окно проверяющего приложения) и дочернее окно среды Delphi (в момент разработки приложения, для Delphi 1.0).
............
procedure TForm1.FormCreate(Sender:
TObject); Wnd : hWnd; begin Wnd := GetWindow(Handle, gw_HWndFirst); {Если не собственное и не дочернее
окно} GetWindowText(Wnd, buff, sizeof(buff)); MessageDlg('Приложение уже загружено',
mtWarning, [mbOk], 0); END; END; END; end; ............
VAR
buff: ARRAY [0..127] OF Char;
WC: TWndClass;
WHILE Wnd <> 0 DO BEGIN
IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0) THEN BEGIN
{Если заголовок совпадает, то...}
IF StrPas(buff) = Application.Title THEN BEGIN
Halt;
Wnd := GetWindow(Wnd, gw_hWndNext);
...предыдущая страница следующая...
оглавление