Проблемка с проверкой запуска приложения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Проблемка с проверкой запуска приложения

Сообщение qivi »

Вот примерно так выглядел код файла проекта в Делфи который призван проверять а небылали данная программа уже запущенна:

Код: Выделить всё

program QWER;

uses
  Forms,
  windows,
  QWER in 'QWER.pas' {Voshod},
  Zastavka in 'Zastavka.pas' {Zastava},
 
Const NamedMutex='QWER'; // Описание моего мьютекса
Var WND:HWND;

Function CheckInstance(Name: PChar): Integer;
Var Mutex:Integer;
Begin
 Mutex:=CreateMutex(nil,True,Name);
 IF GetLastError<>0 then Result:=0 else Result:=Mutex;
 ReleaseMutex(Mutex);
End;

{$R *.res}


begin
 With Application Do
  Begin
   IF CheckInstance(NamedMutex)=0 then
    {Если наш мьютекс уже найден в системе}
    Begin
    {Находим окно объекта TApplication}
    WND:=Findwindow(nil,'БЛА БЛА БЛА');
    IF WND<>0 then
     Begin
     {Восстанавливаем его}
     ShowWindow(WND,SW_RESTORE);
     {Устанавливаем в качестве переднего окна}
     SetForeGroundWindow(Wnd);
     {Выходим из программы, не запускем её}
     Exit;
    End;
   End;
   Title:='БЛА БЛА БЛА';
   Initialize;

  Application.Initialize;
  Zastava := TZastava.Create(Application);
  Zastava.Show;
  Zastava.Update;
  while Zastava.TimerZastava.Enabled do Application.ProcessMessages;
  Zastava.Hide;
  Zastava.Free;
  Application.CreateForm(TQWER, QWER);
 
 end;
end.

Вот так я его перенёс в файл проекта лазарус:

Код: Выделить всё

program QWER;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { you can add units after this }, QWER, zastavka;

Const NamedMutex='QWER';
Var WND:HWND;

Function CheckInstance(Name: PChar): Integer;
Var Mutex:Integer;
Begin
 Mutex:=CreateMutex(nil,True,Name);
 IF GetLastError<>0 then Result:=0 else Result:=Mutex;
 ReleaseMutex(Mutex);
End;

{$IFDEF WINDOWS}{$R manifest.rc}{$ENDIF}

begin
 With Application Do
  Begin
   IF CheckInstance(NamedMutex)=0 then
    {Если наш мьютекс уже найден в системе}
    Begin
    {Находим окно объекта TApplication}
    WND:=Findwindow(nil,'БЛА БЛА БЛА');
    IF WND<>0 then
     Begin
     {Восстанавливаем его}
     ShowWindow(WND,SW_RESTORE);
     {Устанавливаем в качестве переднего окна}
     SetForeGroundWindow(Wnd);
     {Выходим из программы, не запускем её}
     Exit;
    End;
   End;
   Title:='БЛА БЛА БЛА';
   Initialize;

  Application.Initialize;
  zastava := Tzastava.Create(Application);
  zastava.Show;
  zastava.Update;
  while zastava.timerzastava.Enabled do Application.ProcessMessages;
  zastava.Hide;
  zastava.Free;
  Application.CreateForm(TQWER, QWER);
  Application.Run;
 end;
end.


Жалуется на строку:

Код: Выделить всё

Var WND:HWND;


Ну и как следствие на все последующие с этой переменной!!!

Что делать?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Внимательней нужно смотреть!
А где подключение модуля Windows?
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Возможно дело в неподключенном модуле windows в нижнем варианте.
Попробуй добавить в uses'ах.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

serg_iv писал(а):Возможно дело в неподключенном модуле windows в нижнем варианте.
Попробуй добавить в uses'ах.

Объясняю тип HWND описан в модуле Windows. отсюда вывод: необхотимо подключить модуль Windows...
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Спасибо!!! Заработало!!!
Ответить