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

Вниз

Опять сервисы !!!   Найти похожие ветки 

 
BigFoot   (2001-10-12 12:24) [0]

Народ, помогите с сервайсами !!!
Объясняю задачу: Мне нужен сервис, который бы постоянно убивал определённые процессы. Вернее, сервайс бы постоянно посылал сообщение WM_CLOSE окнам с определённым названием\классом окна, а так же валил собственно процессы. Список процессов\Окон он должен находить в файле config.ini, который лежит в том же каталоге, что и исполняемый файл сервиса.
Мой "сервис" выглядит так:

Unit BFServ;

Interface

Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Inifiles, Forms;

Type
TMyServ = Class(TService)
Procedure ServiceExecute(Sender: TService);
Procedure ServiceStart(Sender: TService; Var Started: Boolean);
private
{ Private declarations }
wlist: TStrings;
clist: TStrings;
plist: TStrings;
WindowsList: TStrings;
ClassesList: TStrings;
ProcessesList: TStrings;
public
Function GetServiceController: TServiceController; override;
Procedure ReadDatas;
{ Public declarations }
End;
Var
MyServ : TMyServ;

Implementation

{$R *.DFM}

Procedure ServiceController(CtrlCode: DWord); stdcall;
Begin
MyServ.Controller(CtrlCode);
End;

Function TMyServ.GetServiceController: TServiceController;
Begin
Result:= ServiceController;
End;

Procedure TMyServ.ReadDatas;
Var
CfgFile : TIniFile;
s1 : String;
i : Integer;
Begin
wlist:= TStringList.Create;
clist:= TStringList.Create;
plist:= TStringList.Create;
WindowsList:= TStringList.Create;
ClassesList:= TStringList.Create;
ProcessesList:= TStringList.Create;

If (FileExists(ExtractFileDir(Application.ExeName) + "\config.cfg")) Then
Begin
CfgFile:= TIniFile.Create(s1);
CfgFile.ReadSection("WINDOWS", WList);
CfgFile.ReadSection("CLASSES", CList);
CfgFile.ReadSection("PROCESSES", PList);
If (Assigned(WList)) And (wlist.Count > 0) Then
For i:= 0 To wlist.Count - 1 Do
WindowsList.Add(CfgFile.ReadString("WINDOWS", "w" + IntToStr(i), ""));
If (Assigned(CList)) And (Clist.Count > 0) Then
For i:= 0 To Clist.Count - 1 Do
ClassesList.Add(CfgFile.ReadString("CLASSES", "c" + IntToStr(i), ""));
If (Assigned(PList)) And (Plist.Count > 0) Then
For i:= 0 To Plist.Count - 1 Do
ProcessesList.Add(CfgFile.ReadString("PROCESSES", "p" + IntToStr(i), ""));
CfgFile.Free;
ServiceThread.ProcessRequests(True);
End;
End;

Procedure TMyServ.ServiceExecute(Sender: TService);
Var
i : Integer;
Begin
While Not Terminated Do
Begin
For i:= 0 To WindowsList.Count - 1 Do
SendMessage(FindWindow(Nil, PChar(WindowsList[i])), WM_CLOSE, 0, 0);
ServiceThread.ProcessRequests(True);
If terminated Then Application.Terminate;
For i:= 0 To ClassesList.Count - 1 Do
SendMessage(FindWindow(PChar(ClassesList[i]), Nil), WM_CLOSE, 0, 0);
End;

End;

Procedure TMyServ.ServiceStart(Sender: TService; Var Started: Boolean);
Begin
ReadDatas;
Status:= csRunning;
End;

End.

Сервис стартует и останавливается, но за свою жизнь ничего послезного не делает. Почему ? Кто знает, помогите, плиз !!
Need help !!!


 
SKiwa   (2001-10-13 07:55) [1]

На вскидку приходит в голову следующее
ServiceThread.ProcessRequests(True);
Замени на
ServiceThread.ProcessRequests(False);

ProcessRequests(True) - ожидает сообщения, соответственно Execute у тебя фактически выполняется при старте и завершении и все.



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
1-75553
Анатолий
2002-01-06 06:21
2002.01.24
Литература по отчётам


6-75646
VideoLord
2001-10-31 21:19
2002.01.24
Indy - idTCPServer


1-75556
Cobalt
2002-01-05 11:47
2002.01.24
Создание своих форм


1-75587
Foy
2002-01-06 14:43
2002.01.24
Сохранение и вызов файла


3-75524
Dim
2001-12-21 14:34
2002.01.24
Первый раз такое вижу. Что это такое?