Количество активных потоков и загруженность процессора

=== Количество активных потоков и загруженность процессора ===
В реестре есть раздел HKEY_DYN_DATA. Основная информация о системе хранится в ключе PerfStats. 
О получении информации,например, о загруженности процессора, необходимо проделать следующие шаги: 
Для начала необходимо запустить установленный счётчик в реестре. Это возможно путём считывания значения ключа, отвечающего за нужный параметр системы. 
Например 
Просто считываем значение ключа 'PerfStats\StartStat\KERNEL\CPUusage' в секции HKEY_DYN_DATA. данное действие запускает счётчик. После этого в ключе 'PerfStats\StatData\KERNEL\CPUusage' будет храниться значение в процентах о загруженности процессора.
Далее, если добавить считывание загруженности процессора в событие On timer, то мы сможем наблюдать изменение загруженности процессора в динамике. 
По завершении, Ваша программа должна остановить счётчик в реестре. Для этого просто считай ключ 'PerfStats\StopStat\KERNEL\CPUusage'.Это остановит счётчик. 
Так же в системе есть много других счётчиков. Весь список счётчиков можно посмотреть в ключе PerfStats\StatData, используя редактор реестра. 
Представленный ниже исходник получает значения всех счётчиков, расположенных в секции HKEY_DYN_DATA. 
unit SystemInfo;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;
type
 TDialupAdapterInfo = record // Информация о Dialup адаптере
 alignment: dword;
 buffer: dword;
 bytesrecieved: dword;
 bytesXmit: dword;
 ConnectSpeed: dword;
 CRC: dword;
 framesrecieved: dword;
 FramesXmit: dword;
 Framing: dword;
 runts: dword;
 Overrun: dword;
 timeout: dword;
 totalbytesrecieved: dword;
 totalbytesXmit: dword;
 end;
type
 TKernelInfo = record
 CpuUsagePcnt: dword;
 Numthreads: dword;
 NumVMS: dword;
 end;
type
 TVCACHEInfo = record
 ccurpages: dword;
 cMacPages: dword;
 cminpages: dword;
 FailedRecycles: dword;
 Hits: dword;
 LRUBuffers: dword;
 LRURecycles: dword;
 Misses: dword;
 RandomRecycles: dword;
 end;
type
 TFATInfo = record
 BreadsSec: dword;
 BwritesSec: dword;
 Dirtydata: dword;
 ReadsSec: dword;
 WritesSec: dword;
 end;
type
 TVMMInfo = record
 CDiscards: dword;
 CInstancefaults: dword;
 CPageFaults: dword;
 cPageIns: dword;
 cPageOuts: dword;
 cpgCommit: dword;
 cpgDiskCache: dword;
 cpgDiskCacheMac: dword;
 cpgDiskCacheMid: dword;
 cpgDiskCacheMin: dword;
 cpgfree: dword;
 cpglocked: dword;
 cpglockedNoncache: dword;
 cpgother: dword;
 cpgsharedpages: dword;
 cpgswap: dword;
 cpgswapfile: dword;
 cpgswapfiledefective: dword;
 cpgswapfileinuse: dword;
 end;
type
 TSysInfo = class(TComponent)
 private
 fDialupAdapterInfo: TDialupAdapterInfo;
 fKernelInfo: TKernelInfo;
 fVCACHEInfo: TVCACHEInfo;
 fFATInfo: TFATInfo;
 fVMMInfo: TVMMInfo;
 ftimer: TTimer;
 fupdateinterval: integer;
 tmp: dword;
 vsize: dword;
 pkey: hkey;
 regtype: pdword;
 fstopped: boolean;
 procedure fupdatinginfo(Sender: TObject);
 procedure fsetupdateinterval(aupdateinterval: integer);
 protected
 fsysInfoChanged: TNotifyEvent;
 public
 constructor Create(Aowner: TComponent); override;
 destructor Destroy; override;
 property DialupAdapterInfo: TDialupAdapterInfo read fDialupAdapterInfo;
 property KernelInfo: TKernelInfo read fKernelInfo;
 property VCACHEInfo: TVCACHEInfo read fVCACHEInfo;
 property FATInfo: TFATInfo read fFATInfo;
 property VMMInfo: TVMMInfo read fVMMInfo;
 procedure StartRecievingInfo;
 procedure StopRecievingInfo;
 published
 property SysInfoChanged: TNotifyEvent read fsysInfoChanged write fsysInfoChanged;
 // Это событие вызывается после определённого интервала времени.
 property UpdateInterval: integer read fupdateInterval
 write fsetupdateinterval default 5000;
 end;
procedure Register;
implementation
constructor TSysInfo.Create(Aowner: TComponent);
begin
 inherited;
 ftimer := ttimer.Create(self);
 ftimer.Enabled := False;
 ftimer.OnTimer := fupdatinginfo;
 vsize := 4;
 fstopped := True;
end;
procedure TSysInfo.startrecievingInfo;
var
 res: integer;
begin
 res := RegOpenKeyEx(HKEY_DYN_DATA, 'PerfStats\StartStat', 0, KEY_ALL_ACCESS, pkey);
 if res <> 0 then
 raise Exception.Create('Could not open registry key');
 fstopped := False;
 // Для Dial Up Адаптера
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Alignment', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Buffer', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Framing', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Overrun ', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Timeout', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\CRC', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Runts', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\ConnectSpeed', nil, regtype, @tmp, @vsize);
 // Для VCACHE
 RegQueryValueEx(pkey, 'VCACHE\LRUBuffers', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\FailedRecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\RandomRecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\LRURecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Misses', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Hits', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMacPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMinPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cCurPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesXmit', nil, regtype, @tmp, @vsize);
 // Для VFAT
 RegQueryValueEx(pkey, 'VFAT\DirtyData', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BReadsSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BWritesSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\ReadsSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\WritesSec', nil, regtype, @tmp, @vsize);
 // Для VMM
 RegQueryValueEx(pkey, 'VMM\cpgLockedNoncache', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgCommit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSharedPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMid', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMac', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMin', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcache', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileDefective', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileInUse', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfile', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cDiscards', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageOuts', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageIns', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cInstanceFaults', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageFaults', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgOther', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwap', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgLocked', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgFree', nil, regtype, @tmp, @vsize);
 // Для KERNEL
 RegQueryValueEx(pkey, 'KERNEL\CPUUsage', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\VMs', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\Threads', nil, regtype, @tmp, @vsize);
 RegCloseKey(pkey);
 ftimer.Enabled := True;
end;
procedure tsysinfo.fupdatinginfo(Sender: TObject);
var
 res: integer;
begin
 res := RegOpenKeyEx(HKEY_DYN_DATA, 'PerfStats\StatData', 0, KEY_ALL_ACCESS, pkey);
 if res <> 0 then
 raise Exception.Create('Could not open registry key');
 // Для Dial Up Адаптера
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Alignment', nil, regtype,
 @fDialupAdapterInfo.alignment, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Buffer', nil, regtype,
 @fDialupAdapterInfo.buffer, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Framing', nil, regtype,
 @fDialupAdapterInfo.framing, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Overrun ', nil, regtype,
 @fDialupAdapterInfo.overrun, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Timeout', nil, regtype,
 @fDialupAdapterInfo.timeout, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\CRC', nil, regtype, @fDialupAdapterInfo.crc, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Runts', nil, regtype,
 @fDialupAdapterInfo.runts, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesXmit', nil, regtype,
 @fDialupAdapterInfo.framesxmit, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesRecvd', nil, regtype,
 @fDialupAdapterInfo.framesrecieved, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesXmit', nil, regtype,
 @fDialupAdapterInfo.bytesxmit, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesRecvd', nil, regtype,
 @fDialupAdapterInfo.bytesrecieved, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesXmit', nil, regtype,
 @fDialupAdapterInfo.totalbytesxmit, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesRecvd', nil, regtype,
 @fDialupAdapterInfo.totalbytesrecieved, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\ConnectSpeed', nil, regtype,
 @fDialupAdapterInfo.connectspeed, @vsize);
 // Для VCACHE
 RegQueryValueEx(pkey, 'VCACHE\LRUBuffers', nil, regtype, @fVCACHEInfo.lrubuffers, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\FailedRecycles', nil, regtype,
 @fVCACHEInfo.failedrecycles, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\RandomRecycles', nil, regtype,
 @fVCACHEInfo.randomrecycles, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\LRURecycles', nil, regtype, @fVCACHEInfo.lrurecycles, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Misses', nil, regtype, @fVCACHEInfo.misses, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Hits', nil, regtype, @fVCACHEInfo.hits, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMacPages', nil, regtype, @fVCACHEInfo.cmacpages, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMinPages', nil, regtype, @fVCACHEInfo.cminpages, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cCurPages', nil, regtype, @fVCACHEInfo.ccurpages, @vsize);
 // Для VFAT
 RegQueryValueEx(pkey, 'VFAT\DirtyData', nil, regtype, @ffatinfo.dirtydata, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BReadsSec', nil, regtype, @ffatinfo.breadssec, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BWritesSec', nil, regtype, @ffatinfo.bwritessec, @vsize);
 RegQueryValueEx(pkey, 'VFAT\ReadsSec', nil, regtype, @ffatinfo.readssec, @vsize);
 RegQueryValueEx(pkey, 'VFAT\WritesSec', nil, regtype, @ffatinfo.writessec, @vsize);
 // Для VMM
 RegQueryValueEx(pkey, 'VMM\cpgLockedNoncache', nil, regtype,
 @fvmminfo.cpglockednoncache, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgCommit', nil, regtype, @fvmminfo.cpgcommit, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSharedPages', nil, regtype, @fvmminfo.cpgsharedpages, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMid', nil, regtype, @fvmminfo.cpgdiskcacheMid, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMac', nil, regtype, @fvmminfo.cpgdiskcacheMac, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMin', nil, regtype, @fvmminfo.cpgdiskcacheMin, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcache', nil, regtype, @fvmminfo.cpgdiskcache, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileDefective', nil, regtype,
 @fvmminfo.cpgswapfiledefective, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileInUse', nil, regtype,
 @fvmminfo.cpgswapfileinuse, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfile', nil, regtype, @fvmminfo.cpgswapfile, @vsize);
 RegQueryValueEx(pkey, 'VMM\cDiscards', nil, regtype, @fvmminfo.cdiscards, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageOuts', nil, regtype, @fvmminfo.cpageouts, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageIns', nil, regtype, @fvmminfo.cpageins, @vsize);
 RegQueryValueEx(pkey, 'VMM\cInstanceFaults', nil, regtype, @fvmminfo.cinstancefaults, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageFaults', nil, regtype, @fvmminfo.cpagefaults, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgOther', nil, regtype, @fvmminfo.cpgother, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwap', nil, regtype, @fvmminfo.cpgswap, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgLocked', nil, regtype, @fvmminfo.cpglocked, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgFree', nil, regtype, @fvmminfo.cpgfree, @vsize);
 // Для KERNEL
 RegQueryValueEx(pkey, 'KERNEL\CPUUsage', nil, regtype, @fkernelinfo.cpuusagepcnt, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\VMs', nil, regtype, @fkernelinfo.numvms, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\Threads', nil, regtype, @fkernelinfo.numThreads, @vsize);
 RegCloseKey(pkey);
 if assigned(SysInfoChanged) then
 SysInfoChanged(self);
end;
procedure TSysInfo.stoprecievingInfo;
var
 res: integer;
begin
 res := RegOpenKeyEx(HKEY_DYN_DATA, 'PerfStats\StopStat', 0, KEY_ALL_ACCESS, pkey);
 if not fstopped then
 begin
 if res <> 0 then
 raise Exception.Create('Could not open registry key');
 // Для Dial Up Адаптера
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Alignment', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Buffer', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Framing', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Overrun ', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Timeout', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\CRC', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\Runts', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\FramesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesXmit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\TotalBytesRecvd', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\ConnectSpeed', nil, regtype, @tmp, @vsize);
 // Для VCACHE
 RegQueryValueEx(pkey, 'VCACHE\LRUBuffers', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\FailedRecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\RandomRecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\LRURecycles', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Misses', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\Hits', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMacPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cMinPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VCACHE\cCurPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'Dial-Up Adapter\BytesXmit', nil, regtype, @tmp, @vsize);
 // Для VFAT
 RegQueryValueEx(pkey, 'VFAT\DirtyData', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BReadsSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\BWritesSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\ReadsSec', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VFAT\WritesSec', nil, regtype, @tmp, @vsize);
 // Для VMM
 RegQueryValueEx(pkey, 'VMM\cpgLockedNoncache', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgCommit', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSharedPages', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMid', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMac', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcacheMin', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgDiskcache', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileDefective', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfileInUse', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwapfile', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cDiscards', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageOuts', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageIns', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cInstanceFaults', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cPageFaults', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgOther', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgSwap', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgLocked', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'VMM\cpgFree', nil, regtype, @tmp, @vsize);
 // Для KERNEL
 RegQueryValueEx(pkey, 'KERNEL\CPUUsage', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\VMs', nil, regtype, @tmp, @vsize);
 RegQueryValueEx(pkey, 'KERNEL\Threads', nil, regtype, @tmp, @vsize);
 RegCloseKey(pkey);
 ftimer.Enabled := False;
 fstopped := True;
 end;
end;
procedure TSysInfo.fsetupdateinterval(aupdateinterval: integer);
begin
 if (ftimer <> nil) and (aupdateinterval > 0) then
 begin
 ftimer.Interval := aupdateinterval;
 fupdateinterval := aupdateinterval;
 end;
 if (ftimer <> nil) and (aupdateinterval = 0) then
 begin
 ftimer.Interval := 500;
 fupdateinterval := 500;
 end;
end;
destructor TSysInfo.Destroy;
begin
 StopRecievingInfo;
 ftimer.Destroy;
 inherited;
end;
procedure Register;
begin
 RegisterComponents('Samples', [TSysInfo]);
end;
Скопируйте это в файл SystemInfo.pas и проинсталлируйте его.
Author: Vimil Saju
ID: 01427