![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отследить измениение списка запущенных в системе процессов
DelphiN! © (2006-07-19 14:46:00)Необходимо отследить изменение списка запущенных процессов в системе, может в системе есть событие, которое генерируется при изменении списка процессов(создании\удалении)?
AbrosimovA (2006-07-20 10:47:00) [1]Вот, работающий пример:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WbemScripting_TLB, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
FServices: ISWbemServices;
FLocator: TSWbemLocator;
FSink1,FSink2 : TSWbemSink;
procedure ProcessCreated(Sender: TObject; var objWbemObject: OleVariant;
var objWbemAsyncContext: OleVariant);
procedure ProcessDeleted(Sender: TObject; var objWbemObject: OleVariant;
var objWbemAsyncContext: OleVariant);
public
{ Public declarations }
end;
const
wbemConnectFlagUseMaxWait = $00000080;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ProcessCreated(Sender: TObject; var objWbemObject: OleVariant;
var objWbemAsyncContext: OleVariant);
begin
Memo1.Lines.Add('Запущен процесс');
end;
procedure TForm1.ProcessDeleted(Sender: TObject; var objWbemObject: OleVariant;
var objWbemAsyncContext: OleVariant);
begin
Memo1.Lines.Add('Процесс остановлен');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FLocator:=TSWbemLocator.Create(Self);
FServices := FLocator.ConnectServer('.', 'root\cimv2', '',
'', '', '', wbemConnectFlagUseMaxWait, nil);
FSink1 := TSWbemSink.Create(self);
FSink1.OnObjectReady := ProcessCreated;
FServices.ExecNotificationQueryAsync(FSink1.DefaultInterface,
'SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA "Win32_Process"', 'WQL', 0, nil, nil);
FSink2 := TSWbemSink.Create(self);
FSink2.OnObjectReady := ProcessDeleted;
FServices.ExecNotificationQueryAsync(FSink2.DefaultInterface,
'SELECT * FROM __InstanceDeletionEvent WITHIN 0.1 WHERE TargetInstance ISA "Win32_Process"', 'WQL', 0, nil, nil);
end;
end.
Ketmar (2006-07-19 16:58:00) [2]в общем случае -- нет такого события.
Rouse_ (2006-07-19 16:46:00) [3]Есть PsSetCreateProcessNotifyRoutine()
Чапаев (2006-07-19 15:43:00) [4]По таймеру отслеживай -- простейший вариант.