Главная страница
    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-75589
Vacheslav
2002-01-07 13:21
2002.01.24
Как обработать


14-75676
petr_v_a
2001-11-22 17:32
2002.01.24
грабли


3-75511
NikoM
2001-12-21 05:15
2002.01.24
DBEdit


1-75614
Vitalik
2002-01-06 21:08
2002.01.24
создание динамических массиво в Pascale


3-75517
ДЛЛ
2001-12-21 12:27
2002.01.24
Как программно создавать пользователя и давать ему гранты





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