суббота, 9 февраля 2013 г.

получить pid по handle

pItem.SubItems.Add(intToStr(pid));

pItem := processListView.Items.Add();

usage:= pObject.Properties_.Item('PercentProcessorTime',0).get_Value;

pid := pObject.Properties_.Item('IdProcess',0).get_Value;

name := pObject.Properties_.Item('Name',0).Get_Value;

procedure TMainForm.AddProcessToList(var pObject: ISWbemObject);

Собственно добавление информации о процессе в производится функция AddProcessToList():

processListView.Items.EndUpdate;

pObject := refresherItem.ObjectSet.ItemIndex(i);

processListView.Items.BeginUpdate;

pCount := refresherItem.ObjectSet.Count - 1;

procedure TMainForm.TimerTimer(Sender: TObject);

Ок. теперь refresherItem будет содержать список наших процессов, и мы можем его обновлять по событию таймера, и непосредственно выводить в список processListView.

refresherItem := refresher.AddEnum(services as ISWbemServicesEx,'Win32_PerfFormattedData_PerfProc_Process',0,nil);

refresher := CoSWbemRefresher.Create;

procedure TMainForm.FormCreate(Sender: TObject);

refresherItem : ISWbemRefreshableItem;

WMI может быть использован не только для получения статистической информации, как в предыдущем примере, но и , например, для мониторинга системных ресурсов, для чего предусмотрены классы Win32_PerfRawData & Win32_PerfFormattedData. Рассмотрим пример мониторинга списка процессов Windows. Данная задача достаточно проста в реализации с использованием WMI и сводится к десятку-другому строк кода. Для мониторинга и обновления данных объектов/классов унаследованных от Win32_Perf...Data требуется использовать объект класса ISWbemRefresher, который хранит коллекцию объектов для обновления. Для отображения информации на форму добавим processListView : TListView, и обновлять данные будем по событию таймера. При создании формы создадим объект для обновления, и сохраним его в private секции. При добавлении класса в коллекцию ISWbemRefresher возвращает экземпляр ISWbemRefresherItem, из которого мы уже и будем извлекать обновленные данные. Расширим программу предыдущего примера следующим образом:

Опубликовано 25.04.2010 г. 23:39

Delphi programming blog | WMI & process list

Комментариев нет:

Отправить комментарий