Практика
Получение информации о загрузке процессора в Win9x

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Стартовая ::
:: В избранное ::
:: Написать ::
Яндекс.Метрика


И с самого начала нужно сделать небольшую оговорку. В данном примере информация о загрузке процессора берется из реестра, из раздела "HKEY_DYN_DATA", а такой раздел существует, скорее всего, только в Windows 9x. Из всего сказанного выше следует, что данный пример будет работать, скорее всего, только в Windows 9x.

А теперь вернемся к делу. Основная информация о системе хранится в ключе "HKEY_DYN_DATA\PerfStats". О получении информации о загруженности процессора, необходимо проделать следующие шаги:

  • Для начала необходимо запустить установленный счётчик в реестре. Это возможно путём считывания значения ключа, отвечающего за нужный параметр системы. Например, просто считываем значение ключа "PerfStats\StartStat\KERNEL\CPUusage" в секции HKEY_DYN_DATA. данное действие запускает счётчик. После этого в ключе "PerfStats\StatData\KERNEL\CPUusage" будет храниться значение в процентах о загруженности процессора.
  • Теперь, если добавить считывание загруженности процессора в событие On timer, то мы сможем наблюдать изменение загруженности процессора в динамике.
  • По завершении, Ваша программа должна остановить счётчик в реестре. Для этого просто считайте ключ "PerfStats\StopStat\KERNEL\CPUusage". Это остановит счётчик. Так же в системе есть много других счётчиков. Весь список счётчиков можно посмотреть в ключе "PerfStats\StatData", используя редактор реестра.


Приступаем. Добавим в раздел Uses модуль Registry.

uses 
  {...}, Registry;

Напишем процедуру для кнопки, которая будет запускать счетчик.

// Запуск счетчика
procedure TForm1.Button1Click(Sender: TObject);
begin
   Reg := TRegistry.Create;
   // Указываем нужный раздел реестра
   Reg.RootKey := HKEY_DYN_DATA;
   // Открываем нужную ветвь
   Reg.OpenKey( 'PerfStats\StartStat', false );
   // Запускаем счетчик
   Reg.ReadBinaryData( 'KERNEL\CPUUsage', Load, 4 );
   Reg.CloseKey;
   Reg.Destroy;
   // Вклбчаем таймер
   Timer1.Enabled := true;
end;

А так выглядит процедура остановки счетчика.

// Остановка счетчика
procedure TForm1.Button2Click(Sender: TObject);
begin
   // Выключаем таймер
   Timer1.Enabled := false;
   // Сбрасываем ProgressBar
   ProgressBar1.Position := 0;
   Reg := TRegistry.Create;
   // Указываем нужный раздел реестра
   Reg.RootKey := HKEY_DYN_DATA;
   // Открываем нужную ветвь
   Reg.OpenKey( 'PerfStats\StopStat', false );
   // Останавливаем счетчик
   Reg.ReadBinaryData( 'KERNEL\CPUUsage', Load, 4 );
   Reg.CloseKey;
   Reg.Destroy;
end;

И наконец процедура для таймера, которая через установленные интервалы времени будет получать и показывать информацию о загрузке процессора.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Reg := TRegistry.Create;
   // Указываем нужный раздел реестра
   Reg.RootKey := HKEY_DYN_DATA;
   // Открываем нужную ветвь
   Reg.OpenKey( 'PerfStats\StatData', false );
   // Узнаем процент загрузки процессора
   Reg.ReadBinaryData( 'KERNEL\CPUUsage', Load, 4 );
   // И показываем загрузку процессора
   // Считанное из реестра знечение хранится 
   // в целочисленной переменной Load
   ProgressBar1.Position := Load;
   Reg.CloseKey;
   Reg.Destroy;
end;

.: Пример к данной статье :.


При использовании материала - ссылка на сайт обязательна