Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Отправить сообщения в службу   Найти похожие ветки 

 
Ling ©   (2006-09-12 18:36) [0]

Пытаюсь написать службу.
В эту службу необходимо отправлять сообщения.
Подскажите, как мне это сделать :)
Вот моя неуклюжая попытка:
Служба:


unit ServiceUnit;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,JobClasses,
 xmldom, XMLIntf, msxmldom, XMLDoc,SyncObjs,ComObj,Activex;

type

 TMainThread=class(TThread)
 private
   FEvent:TEvent;
 protected
   procedure Execute; override;
 public
   constructor Create(CreateSuspended: Boolean);
   destructor destroy;override;
 end;

 TService1 = class(TService)
   XMLDocument1: TXMLDocument;
   procedure InitPathExe;
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);
   procedure ServiceCreate(Sender: TObject);
   procedure ServiceDestroy(Sender: TObject);

 private
   FMainThread:TMainThread;
   Storage:TspData;
   FPathexe:string;
   { Private declarations }
 public
   function GetServiceController: TServiceController; override;

   { Public declarations }
 end;

var
 Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
 Result := ServiceController;
end;

procedure TService1.InitPathExe;
var
 Buffer: array[0..MAX_PATH] of Char;
begin
 FillChar(buffer, sizeof(buffer), #0);
 GetModuleFileName(HInstance, buffer, MAX_PATH);
 FPathExe := string(buffer);
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
 FMainThread.Resume;
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 FMainThread.Terminate;
end;

{ TMainTread }

constructor TMainThread.Create(CreateSuspended: Boolean);
begin
 inherited;
 FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");
end;

destructor TMainThread.destroy;
begin
 FEvent.free;
 inherited;
end;

procedure TMainThread.Execute;
var
 SL:TStringList;
 wr:TWaitResult;
begin
 SL:=tStringList.Create;
 try
   while not terminated do
   begin
         wr:= FEvent.WaitFor(1000);
         case wr of
           wrSignaled:SL.Add(TimeToStr(now)+"::wrSignaled");
           wrTimeout:SL.Add(TimeToStr(now)+"::wrTimeout");
           wrAbandoned:SL.Add(TimeToStr(now)+"::wrAbandoned");
           wrError:SL.Add(TimeToStr(now)+"::wrError");
         end;
     SL.SaveToFile("d:\sp\log.txt");
   end;
 finally
 end;
end;

procedure TService1.ServiceCreate(Sender: TObject);
begin
 FMainThread:=TMainThread.Create(true);
end;

procedure TService1.ServiceDestroy(Sender: TObject);
begin
 FMainThread.Terminate;
 FMainThread.Free;
end;

end.


из длругого приложения я делаю следующее::

procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");
end;

procedure TForm1.ff1Click(Sender: TObject);
begin
 FEvent.SetEvent;
end;


 
Fay ©   (2006-09-12 22:28) [1]

А где тут сообщения?


 
Сергей М. ©   (2006-09-13 10:08) [2]


> FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");


А вот цитата из справки:

Name can be a string of up to 260 characters, not including the backslash character (\).

??



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

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.06 c
1-1164619913
AlexSt
2006-11-27 12:31
2007.01.21
Смена курсора при drag and drop от состояния управляющих клавиш


15-1167236824
kaZaNoVa
2006-12-27 19:27
2007.01.21
Выделение строк


2-1167831429
AlexanderMS
2007-01-03 16:37
2007.01.21
Спеллер Word а для нужд программы.


4-1157437127
ПЛОВ
2006-09-05 10:18
2007.01.21
Какой API ф-цией проверить состояние Radio Button


3-1162447536
firebird
2006-11-02 09:05
2007.01.21
Как создать конструктор отчетов?