Главная страница
    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
3-75506
sasa_ch
2001-12-20 13:02
2002.01.24
как вытащить из таблицы?


14-75672
limon
2001-11-27 17:08
2002.01.24
Уделите 5 минут изучению русского языка...(фамилии)


3-75508
Sergey Karagodin
2001-12-21 10:46
2002.01.24
Размер поля SQL7+ ADOQuery


14-75648
Mike_Goblin
2001-11-26 14:29
2002.01.24
День Варенья у Sir Alex


3-75474
Kaster
2001-12-15 16:21
2002.01.24
Найденная запись стала первой в DBGrid е!





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