Ниже представлен код регистрации постоянного потребителя событий:
objService := GetObject('winmgmts:\\.\Root\CIMV2');
objConsumer := objService.Get('EventViewerConsumer').SpawnInstance_();
objConsumer.Name := 'ServiceStopped';
objConsumer.Description:='Service was stopped';
objConsumer.Severity:=1;
objConsumer.Put_;
objFilter := objService.Get('__EventFilter').SpawnInstance_();
objFilter.Name := 'ServiceStoppedEvent';
objFilter.QueryLanguage := 'WQL';
objFilter.Query := 'SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance isa ''Win32_Service'' AND TargetInstance.State=''Stopped''';
objFilter.Put_;
objFilter := objService.Get('__EventFilter.Name=''ServiceStoppedEvent''');
objConsumer := objService.Get('EventViewerConsumer.Name=''ServiceStopped''');
objBinding := objService.Get('__FilterToConsumerBinding').SpawnInstance_();
objBinding.Filter := objFilter.Path_.RelPath;
objBinding.Consumer := objConsumer.Path_.RelPath;
objBinding.Put_;
Так
procedure WaitForEvent;
var colServices: OleVariant;
objEvent: OleVariant;
begin
colServices := objService.ExecNotificationQuery(objFilter.Query);
objEvent := colServices.NextEvent;
Form1.Caption:=objEvent.TargetInstance.Name;
VarClear(objEvent);
VarClear(colServices);
end;
я пытался читать данные события по останову любого из сервисов. Всё работает,
но ..... форма становится недоступной из-за ожидания события на выделенной жирным шрифтом строке. Бьюсь с этим неделю: пробовал создавать отдельный поток, но не помогает.
Как мне ожидать сообщения без "зависания формы и её элементов"?