亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cpuspeed.pas

?? del *.obj del *.dcu del *.~* del *.hpp del *.dcp del *.dpl del *.cesettings del *.log upx sy
?? PAS
字號:
{*******************************************************}
{                                                       }
{    系統(tǒng)工具箱程序中用到的關(guān)于CPU過程的單元(非原創(chuàng))    }
{                                                       }
{             Copyright (c) 2005, MICHAEL               }
{    http://xuhaohome.yeah.net OR xuhaohome.2008.cc     }
{     E-Mail:x_h168@163.com   QQ:10660578 8416321       }
{                                                       }
{*******************************************************}
unit cpuspeed;

interface

uses
    Windows, SysUtils;

// Call CollectCPUData to refresh information about CPU usage
procedure CollectCPUData;

// Call it to obtain the number of CPU's in the system
function GetCPUCount: Integer;

// Call it to obtain the % of usage for given CPU
function GetCPUUsage(Index: Integer): Double;

// For Win9x only: call it to stop CPU usage monitoring and free system resources
procedure ReleaseCPUData;

implementation

{$ifndef ver110}

    {$ifndef ver90}
    {$ifndef ver100}
    {$define UseInt64}
    {$endif}
    {$endif}


    {$ifdef UseInt64}
    type TInt64 = Int64;
    {$else}
    type TInt64 = Comp;
    {$endif}

{$else}

    type TInt64 = TLargeInteger;

{$endif}

type
    PInt64 = ^TInt64;

type
    TPERF_DATA_BLOCK = record
        Signature : array[0..4 - 1] of WCHAR;
        LittleEndian : DWORD;
        Version : DWORD;
        Revision : DWORD;
        TotalByteLength : DWORD;
        HeaderLength : DWORD;
        NumObjectTypes : DWORD;
        DefaultObject : Longint;
        SystemTime : TSystemTime;
        Reserved: DWORD;
        PerfTime : TInt64;
        PerfFreq : TInt64;
        PerfTime100nSec : TInt64;
        SystemNameLength : DWORD;
        SystemNameOffset : DWORD;
    end;

    PPERF_DATA_BLOCK = ^TPERF_DATA_BLOCK;

    TPERF_OBJECT_TYPE = record
        TotalByteLength : DWORD;
        DefinitionLength : DWORD;
        HeaderLength : DWORD;
        ObjectNameTitleIndex : DWORD;
        ObjectNameTitle : LPWSTR;
        ObjectHelpTitleIndex : DWORD;
        ObjectHelpTitle : LPWSTR;
        DetailLevel : DWORD;
        NumCounters : DWORD;
        DefaultCounter : Longint;
        NumInstances : Longint;
        CodePage : DWORD;
        PerfTime : TInt64;
        PerfFreq : TInt64;
    end;

    PPERF_OBJECT_TYPE = ^TPERF_OBJECT_TYPE;

type
    TPERF_COUNTER_DEFINITION = record
        ByteLength : DWORD;
        CounterNameTitleIndex : DWORD;
        CounterNameTitle : LPWSTR;
        CounterHelpTitleIndex : DWORD;
        CounterHelpTitle : LPWSTR;
        DefaultScale : Longint;
        DetailLevel : DWORD;
        CounterType : DWORD;
        CounterSize : DWORD;
        CounterOffset : DWORD;
    end;

    PPERF_COUNTER_DEFINITION = ^TPERF_COUNTER_DEFINITION;

    TPERF_COUNTER_BLOCK = record
        ByteLength : DWORD;
    end;

    PPERF_COUNTER_BLOCK = ^TPERF_COUNTER_BLOCK;

    TPERF_INSTANCE_DEFINITION = record
        ByteLength : DWORD;
        ParentObjectTitleIndex : DWORD;
        ParentObjectInstance : DWORD;
        UniqueID : Longint;
        NameOffset : DWORD;
        NameLength : DWORD;
    end;

    PPERF_INSTANCE_DEFINITION = ^TPERF_INSTANCE_DEFINITION;

//------------------------------------------------------------------------------
{$ifdef ver130}
{$L-}         // The L+ causes internal error in Delphi 5 compiler
{$O-}         // The O+ causes internal error in Delphi 5 compiler
{$Y-}         // The Y+ causes internal error in Delphi 5 compiler
{$endif}

{$ifndef ver110}
type
    TInt64F = TInt64;
{$else}
type
    TInt64F = Extended;
{$endif}

{$ifdef ver110}
function FInt64(Value: TInt64): TInt64F;
function Int64D(Value: DWORD): TInt64;
{$else}
type
    FInt64 = TInt64F;
    Int64D = TInt64;
{$endif}

{$ifdef ver110}
function FInt64(Value: TInt64): TInt64F;
var V: TInt64;
begin
    if (Value.HighPart and $80000000) = 0 then // positive value
    begin
        result:=Value.HighPart;
        result:=result*$10000*$10000;
        result:=result+Value.LowPart;
    end else
    begin
        V.HighPart:=Value.HighPart xor $FFFFFFFF;
        V.LowPart:=Value.LowPart xor $FFFFFFFF;
        result:= -1 - FInt64(V);
    end;
end;

function Int64D(Value: DWORD): TInt64;
begin
    result.LowPart:=Value;
    result.HighPart := 0; // positive only
end;
{$endif}

//------------------------------------------------------------------------------

const
    Processor_IDX_Str = '238';
    Processor_IDX = 238;
    CPUUsageIDX = 6;

type
    AInt64F = array[0..$FFFF] of TInt64F;
    PAInt64F = ^AInt64F;

var
    _PerfData : PPERF_DATA_BLOCK;
    _BufferSize: Integer;
    _POT : PPERF_OBJECT_TYPE;
    _PCD: PPerf_Counter_Definition;
    _ProcessorsCount: Integer;
    _Counters: PAInt64F;
    _PrevCounters: PAInt64F;
    _SysTime: TInt64F;
    _PrevSysTime: TInt64F;
    _IsWinNT: Boolean;

    _W9xCollecting: Boolean;
    _W9xCpuUsage: DWORD;
    _W9xCpuKey: HKEY;


//------------------------------------------------------------------------------
function GetCPUCount: Integer;
begin
    if _IsWinNT then
    begin
        if _ProcessorsCount < 0 then CollectCPUData;
        result:=_ProcessorsCount;
    end else
    begin
        result:=1;
    end;

end;

//------------------------------------------------------------------------------
procedure ReleaseCPUData;
var H: HKEY;
    R: DWORD;
    dwDataSize, dwType: DWORD;
begin
    if _IsWinNT then exit;
    if not _W9xCollecting then exit;
    _W9xCollecting:=False;

    RegCloseKey(_W9xCpuKey);

    R:=RegOpenKeyEx( HKEY_DYN_DATA, 'PerfStats\StopStat', 0, KEY_ALL_ACCESS, H );

    if R <> ERROR_SUCCESS then exit;

    dwDataSize:=sizeof(DWORD);

    RegQueryValueEx ( H, 'KERNEL\CPUUsage', nil, @dwType, PBYTE(@_W9xCpuUsage), @dwDataSize);

    RegCloseKey(H);

end;

//------------------------------------------------------------------------------
function GetCPUUsage(Index: Integer): Double;
begin
    if _IsWinNT then
    begin
        if _ProcessorsCount < 0 then CollectCPUData;
        if (Index >= _ProcessorsCount) or (Index < 0) then
            raise Exception.Create('CPU index out of bounds');
        if _PrevSysTime = _SysTime then result:=0 else
        result:=1-(_Counters[index] - _PrevCounters[index])/(_SysTime-_PrevSysTime);
    end else
    begin
        if Index <> 0 then
            raise Exception.Create('CPU index out of bounds');
        if not _W9xCollecting then CollectCPUData;
        result:=_W9xCpuUsage / 100;
    end;
end;

var VI: TOSVERSIONINFO;

//------------------------------------------------------------------------------
procedure CollectCPUData;
var BS: integer;
    i: Integer;
    _PCB_Instance: PPERF_COUNTER_BLOCK;
    _PID_Instance: PPERF_INSTANCE_DEFINITION;
    ST: TFileTime;

var H: HKEY;
    R: DWORD;
    dwDataSize, dwType: DWORD;
begin
    if _IsWinNT then
    begin
        BS:=_BufferSize;
        while RegQueryValueEx( HKEY_PERFORMANCE_DATA, Processor_IDX_Str, nil, nil,
                PByte(_PerfData), @BS ) = ERROR_MORE_DATA do
        begin
            // Get a buffer that is big enough.
            INC(_BufferSize,$1000);
            BS:=_BufferSize;
            ReallocMem( _PerfData, _BufferSize );
        end;

        // Locate the performance object
        _POT := PPERF_OBJECT_TYPE(DWORD(_PerfData) + _PerfData.HeaderLength);
        for i := 1 to _PerfData.NumObjectTypes do
        begin
            if _POT.ObjectNameTitleIndex = Processor_IDX then Break;
            _POT := PPERF_OBJECT_TYPE(DWORD(_POT) + _POT.TotalByteLength);
        end;

        // Check for success
        if _POT.ObjectNameTitleIndex <> Processor_IDX then
            raise Exception.Create('Unable to locate the "Processor" performance object');

        if _ProcessorsCount < 0 then
        begin
            _ProcessorsCount:=_POT.NumInstances;
            GetMem(_Counters,_ProcessorsCount*SizeOf(TInt64));
            GetMem(_PrevCounters,_ProcessorsCount*SizeOf(TInt64));
        end;

        // Locate the "% CPU usage" counter definition
        _PCD := PPERF_Counter_DEFINITION(DWORD(_POT) + _POT.HeaderLength);
        for i := 1 to _POT.NumCounters do
        begin
            if _PCD.CounterNameTitleIndex = CPUUsageIDX then break;
            _PCD := PPERF_COUNTER_DEFINITION(DWORD(_PCD) + _PCD.ByteLength);
        end;

        // Check for success
        if _PCD.CounterNameTitleIndex <> CPUUsageIDX then
            raise Exception.Create('Unable to locate the "% of CPU usage" performance counter');

        // Collecting coutners
        _PID_Instance := PPERF_INSTANCE_DEFINITION(DWORD(_POT) + _POT.DefinitionLength);
        for i := 0 to _ProcessorsCount-1 do
        begin
            _PCB_Instance := PPERF_COUNTER_BLOCK(DWORD(_PID_Instance) + _PID_Instance.ByteLength );

            _PrevCounters[i]:=_Counters[i];
            _Counters[i]:=FInt64(PInt64(DWORD(_PCB_Instance) + _PCD.CounterOffset)^);

            _PID_Instance := PPERF_INSTANCE_DEFINITION(DWORD(_PCB_Instance) + _PCB_Instance.ByteLength);
        end;

        _PrevSysTime:=_SysTime;
        SystemTimeToFileTime(_PerfData.SystemTime, ST);
        _SysTime:=FInt64(TInt64(ST));
    end else
    begin
        if not _W9xCollecting then
        begin
            R:=RegOpenKeyEx( HKEY_DYN_DATA, 'PerfStats\StartStat', 0, KEY_ALL_ACCESS, H );
            if R <> ERROR_SUCCESS then
                raise Exception.Create('Unable to start performance monitoring');

            dwDataSize:=sizeof(DWORD);

            RegQueryValueEx( H, 'KERNEL\CPUUsage', nil, @dwType, PBYTE(@_W9xCpuUsage), @dwDataSize );

            RegCloseKey(H);

            R:=RegOpenKeyEx( HKEY_DYN_DATA, 'PerfStats\StatData', 0,KEY_READ, _W9xCpuKey );

            if R <> ERROR_SUCCESS then
                raise Exception.Create('Unable to read performance data');

            _W9xCollecting:=True;
        end;

        dwDataSize:=sizeof(DWORD);
        RegQueryValueEx( _W9xCpuKey, 'KERNEL\CPUUsage', nil,@dwType, PBYTE(@_W9xCpuUsage), @dwDataSize );
    end;
end;


initialization
    _ProcessorsCount:= -1;
    _BufferSize:= $2000;
    _PerfData := AllocMem(_BufferSize);

    VI.dwOSVersionInfoSize:=SizeOf(VI);
    if not GetVersionEx(VI) then raise Exception.Create('Can''t get the Windows version');

    _IsWinNT := VI.dwPlatformId = VER_PLATFORM_WIN32_NT;
finalization
    ReleaseCPUData;
    FreeMem(_PerfData);
end.
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区成人久久免费影院| 欧美影视一区二区三区| 日本韩国精品在线| 精品久久久久久久久久久院品网 | 欧美成人在线直播| 日韩久久一区二区| 国产一区在线观看视频| 欧美精品乱人伦久久久久久| 日本一区二区三区四区| 久久99精品久久久久久国产越南 | 高清免费成人av| 欧美一区二区三级| 亚洲一区二区视频在线观看| 99热99精品| 国产精品视频免费| 激情五月婷婷综合网| 91精品蜜臀在线一区尤物| 一区二区三区蜜桃网| 91原创在线视频| 国产精品你懂的在线欣赏| 国产一区二区三区黄视频 | 亚洲欧美日韩国产综合在线| 国内精品伊人久久久久av一坑| 欧美日韩色一区| 亚洲激情一二三区| 91美女在线看| 亚洲码国产岛国毛片在线| av成人老司机| 亚洲人一二三区| 99久久免费国产| 亚洲婷婷综合久久一本伊一区| 成人精品免费看| 中文字幕色av一区二区三区| youjizz久久| 亚洲欧美色综合| 欧美婷婷六月丁香综合色| 亚洲一区二区三区四区在线 | 首页国产丝袜综合| 精品视频色一区| 日日摸夜夜添夜夜添精品视频 | 中文无字幕一区二区三区| 国产精品系列在线观看| 国产欧美日韩另类一区| 成人av小说网| 一区二区三区四区国产精品| 欧美日韩激情在线| 麻豆久久久久久| 国产拍揄自揄精品视频麻豆| 成人听书哪个软件好| 日韩美女精品在线| 欧美视频一区二区| 奇米一区二区三区| 国产精品视频在线看| 欧美最猛性xxxxx直播| 三级成人在线视频| 久久午夜色播影院免费高清| 99热在这里有精品免费| 天堂在线亚洲视频| 久久久国产午夜精品| 色噜噜狠狠色综合中国| 男人的j进女人的j一区| 国产精品久久久99| 69堂国产成人免费视频| 成人午夜免费av| 香蕉av福利精品导航| 国产色一区二区| 欧美日韩国产大片| 成人国产精品免费观看| 日本中文在线一区| 中文字幕欧美一| 精品欧美一区二区三区精品久久| 99麻豆久久久国产精品免费 | 亚洲综合在线视频| 久久综合狠狠综合久久综合88| 一本久久精品一区二区| 久久精品国内一区二区三区| 亚洲人成7777| 国产亚洲人成网站| 日韩午夜av电影| 欧美一区二区三区日韩| www.日韩在线| 久久99精品网久久| 日本三级亚洲精品| 一区二区三区四区在线免费观看| 久久综合色鬼综合色| 在线播放日韩导航| 在线欧美小视频| 国产成人av电影在线| 久久99国产精品久久99| 亚洲成人动漫在线免费观看| 亚洲人123区| 国产精品青草综合久久久久99| 日韩美女一区二区三区| 欧美精品黑人性xxxx| 欧美色老头old∨ideo| 成人午夜免费av| 高清国产午夜精品久久久久久| 卡一卡二国产精品| 麻豆91在线播放免费| 亚洲成人免费在线| 亚洲不卡一区二区三区| 亚洲主播在线观看| 夜夜嗨av一区二区三区中文字幕| 国产精品美女久久久久久久久| 久久精品亚洲精品国产欧美 | 亚洲日本在线观看| 中文字幕一区二区三区四区不卡| 国产日韩亚洲欧美综合| 久久久精品蜜桃| 国产午夜亚洲精品午夜鲁丝片| 久久影院视频免费| 欧美videossexotv100| 亚洲精品在线网站| 久久久不卡影院| 国产精品视频一二三| 中文字幕精品一区二区三区精品| 国产亚洲视频系列| 国产精品久久久久久久第一福利| 国产精品白丝在线| 亚洲精品国产成人久久av盗摄| 亚洲麻豆国产自偷在线| 亚洲国产裸拍裸体视频在线观看乱了| 一区二区三区四区视频精品免费| 亚洲狠狠丁香婷婷综合久久久| 亚洲国产成人va在线观看天堂| 亚洲mv大片欧洲mv大片精品| 日本欧美一区二区三区| 激情av综合网| 99精品欧美一区| 91福利资源站| 91精品国产综合久久久蜜臀粉嫩| 日韩精品一区在线| 中文字幕乱码亚洲精品一区 | 日本高清不卡在线观看| 欧美性猛片aaaaaaa做受| 91精品欧美一区二区三区综合在 | 精品久久久久久亚洲综合网 | 成人综合婷婷国产精品久久蜜臀| 成人app下载| 欧美日韩一区二区电影| 日韩三区在线观看| 国产欧美1区2区3区| 一区二区三区av电影 | 日本成人中文字幕在线视频| 国内精品嫩模私拍在线| 99久久国产综合精品女不卡| 欧美日韩国产一级二级| 精品噜噜噜噜久久久久久久久试看 | 久久国产夜色精品鲁鲁99| 国产不卡视频在线播放| 欧美人狂配大交3d怪物一区| 精品99一区二区| 一区二区三区精密机械公司| 久久99精品国产麻豆婷婷洗澡| 成人精品鲁一区一区二区| 欧美精品v国产精品v日韩精品| 精品国产乱码久久久久久久| 亚洲精品日日夜夜| 国产电影一区在线| 欧美精选一区二区| 国产精品久久久久久久久果冻传媒 | 亚洲色图19p| 日本中文字幕一区二区视频 | 国产一区二区不卡老阿姨| 在线观看日产精品| 国产欧美日韩另类视频免费观看| 天堂蜜桃91精品| 91丨porny丨中文| 久久久国产一区二区三区四区小说 | 亚洲乱码中文字幕| 国产一区二区看久久| 欧美日韩国产大片| 亚洲欧美一区二区在线观看| 国产一区欧美一区| 日韩免费成人网| 日韩成人免费电影| 91久久奴性调教| 国产精品电影一区二区| 国产一级精品在线| 日韩免费成人网| 日韩精品欧美精品| 欧美中文字幕一二三区视频| 亚洲欧美在线视频观看| 成人av网站免费| 国产人成亚洲第一网站在线播放 | 欧美大白屁股肥臀xxxxxx| 亚洲国产日韩a在线播放性色| 99视频一区二区三区| 国产视频亚洲色图| 国产.欧美.日韩| 国产日韩精品一区二区三区 | 欧美日韩一区二区三区免费看| 亚洲另类春色国产| 91在线小视频| 亚洲视频中文字幕| 色视频成人在线观看免| 亚洲日本丝袜连裤袜办公室| 91丨porny丨中文| 亚洲一区二区三区自拍| 欧美日韩国产乱码电影|