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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
1-75588
Tuk
2002-01-03 19:42
2002.01.24
Мастера, подскажите, отчет не помещается по ширине на лист с альбомной ориентацией как его можно разарезать?


1-75554
Анатолий
2002-01-06 06:20
2002.01.24
Цвет ячейки StringGrid


6-75641
Dust
2001-10-28 01:42
2002.01.24
Ограничение на размер пакета


3-75500
xmapa
2001-12-20 17:43
2002.01.24
ПОСЛЕДНИЙ ПРЕДСМЕРТНЫЙ ВОПЛЬ УТОПАЮЩЕГО!!!!


7-75688
VS
2001-10-08 13:22
2002.01.24
Конвентирование String в PChar





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