Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уважаемые мастера подскажите плиз, как в сервисе установить [D6, D7, Win2k]


Страницы:   1 2

Alibaba ©   (2004-05-28 08:30:00) 

RegisterWindowMessage,
я делаю так
type
 Tlogo = class(TService)
    procedure DefaultHandler(var Message); override;
     private
     public
   
 end;
var
 logo: Tlogo;
  fmsg:integer;

procedure Tlogo.DefaultHandler(var message);
begin

     with TMessage(message) do begin
       if (msg = FMsg) then begin
            messagebox(0, pchar('произошло'),pchar('что надо'),MB_SERVICE_NOTIFICATION);
            end
  else
           inherited DefaultHandler(message);
   end;
end;

initialization
  FMsg := RegisterWindowMessage('TaskbarCreated');
что то не работает ? :-(


Alibaba   (2004-05-28 10:44:00) [21]

выдается сообщение сервис создан и сообщение о том что обнаружена ошибка и приложение будет закрыто


Alibaba   (2004-05-28 10:43:00) [22]

выдается сообщение сервис стартанул и сообщение о том что обнаружена ошибка и приложение будет закрыто


Alibaba   (2004-05-28 10:32:00) [23]

type
 Tlogo = class(TService)
   procedure MyWindowProc(var Message: TMessage);
   procedure ServiceCreate(Sender: TObject);
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);

 private
 public
  FWnd: THandle;

 end;

var
 logo: Tlogo;
 fmsg:integer;
 implementation
{$R *.DFM}
procedure Tlogo.ServiceCreate(Sender: TObject);
begin
messagebox(0, pchar('service'),pchar('create'),MB_SERVICE_NOTIFICATION);
end;

procedure Tlogo.ServiceStart(Sender: TService; var Started: Boolean);
begin
messagebox(0, pchar('start'),pchar('service'),MB_SERVICE_NOTIFICATION);
FWnd := AllocateHWnd(MyWindowProc);
messagebox(0, pchar('start'),pchar('service'),MB_SERVICE_NOTIFICATION);
end;

procedure Tlogo.MyWindowProc(var Message: TMessage);
begin
if (message.Msg = FMsg) then begin
 messagebox(0, pchar('произошло'),pchar('что надо'),MB_SERVICE_NOTIFICATION);
end ;
end;
procedure Tlogo.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
DeallocateHWnd(FWnd);
end;
делаю так, а он создается, но не хочет запускаться :-(


Digitman   (2004-05-28 10:04:00) [24]


> т.е мне сначала необходимо создать форму?


ну почему обязательно форму ? достаточно просто окно создать, например, вызовом ф-ции AllocateHWND()

создать окно можно в OnStart, уничтожить - в OnStop

если не назначать обработчик OnExecute, диспетчеризация оконных сообщений происходит автоматически, все что требуется - просто при вызове AllocateHWND() передать ей параметром адрес метода, который будет вызываться всякий раз при получении окном любого адресованного ему сообщения

Tlogo = class(TService)
  FWnd: THandle;
..
   procedure MyWindowProc(var Message: TMessage);
..  
end;

procedure Tlogo.MyWindowProc(var Message: TMessage);
begin
if (msg = FMsg) then begin
  messagebox(0, pchar('произошло'),pchar('что надо'),MB_SERVICE_NOTIFICATION);
end ;
end;

в Tlogo.OnStart:

 FWnd := AllocateHWnd(MyWindowProc);

в Tlogo.OnStop:

 DeallocateHWnd(FWnd);


Alibaba   (2004-05-28 09:31:00) [25]

т.е мне сначала необходимо создать форму?
ок, а когда мне ее лудше создать, при создании сервиса или при старте?


Digitman   (2004-05-28 09:14:00) [26]


> что то не работает


и не будет это работать, потому что сообщение это, будучи посланным, адресовано верхнеуровневым окнам десктопа, а у тебя  сервис, очевидно, никаких окон не создает

ко всему прочему, передача управления на DefaultHandler() произойдет лишь тогда, когда где-либо будет вызван метод Tlogo.Dispatch() ... а этот метод никто кроме тебя самого не вызовет


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо