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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.45 MB
Время: 0.094 c
2-1167993908
sashafan
2007-01-05 13:45
2007.01.21
ListBox1 и Memo1


2-1167738956
d_xaos
2007-01-02 14:55
2007.01.21
Мультиязычность интерфейса.


15-1167118831
BiN
2006-12-26 10:40
2007.01.21
The Guess Who, American Woman


1-1164713739
leksNov
2006-11-28 14:35
2007.01.21
Помогите!!!


8-1145258401
Sub_Black
2006-04-17 11:20
2007.01.21
Bitmap=>Jpeg без модуля Jpeg соотвтственно.





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