• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            牽牛散步
            仗劍走天涯

            #include <Ice/Ice.h>
            #include <iostream>
            #include <GetWinSysState.h>
            #include <Winbase.h>
            #include <conio.h>
            #include <stdio.h>
            #include <fstream>
            #include <iostream>
            #include <string>
            #include <direct.h>

            #define SystemBasicInformation?????? 0
            #define SystemPerformanceInformation 2
            #define SystemTimeInformation??????? 3

            #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))
            //ICE預編譯語句

            #ifdef _DEBUG
            #pragma comment(lib, "iced.lib")
            #pragma comment(lib, "iceutild.lib")
            #else
            #pragma comment(lib, "ice.lib")
            #pragma comment(lib, "iceutil.lib")
            #endif

            typedef struct
            {
            ??? DWORD?? dwUnknown1;
            ??? ULONG?? uKeMaximumIncrement;
            ??? ULONG?? uPageSize;
            ??? ULONG?? uMmNumberOfPhysicalPages;
            ??? ULONG?? uMmLowestPhysicalPage;
            ??? ULONG?? uMmHighestPhysicalPage;
            ??? ULONG?? uAllocationGranularity;
            ??? PVOID?? pLowestUserAddress;
            ??? PVOID?? pMmHighestUserAddress;
            ??? ULONG?? uKeActiveProcessors;
            ??? BYTE??? bKeNumberProcessors;
            ??? BYTE??? bUnknown2;
            ??? WORD??? wUnknown3;
            } SYSTEM_BASIC_INFORMATION;

            typedef struct
            {
            ??? LARGE_INTEGER?? liIdleTime;
            ??? DWORD?????????? dwSpare[76];
            } SYSTEM_PERFORMANCE_INFORMATION;

            typedef struct
            {
            ??? LARGE_INTEGER liKeBootTime;
            ??? LARGE_INTEGER liKeSystemTime;
            ??? LARGE_INTEGER liExpTimeZoneBias;
            ??? ULONG???????? uCurrentTimeZoneId;
            ??? DWORD???????? dwReserved;
            } SYSTEM_TIME_INFORMATION;


            // ntdll!NtQuerySystemInformation (NT specific!)
            //
            // The function copies the system information of the
            // specified type into a buffer
            //
            // NTSYSAPI
            // NTSTATUS
            // NTAPI
            // NtQuerySystemInformation(
            //??? IN UINT SystemInformationClass,??? // information type
            //??? OUT PVOID SystemInformation,?????? // pointer to buffer
            //??? IN ULONG SystemInformationLength,? // buffer size in bytes
            //??? OUT PULONG ReturnLength OPTIONAL?? // pointer to a 32-bit
            //?????????????????????????????????????? // variable that receives
            //?????????????????????????????????????? // the number of bytes
            //?????????????????????????????????????? // written to the buffer
            // );
            typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

            PROCNTQSI NtQuerySystemInformation;

            /*
            ? 功能:得到CPU使用狀態
            ? 參數:無
            ? 返回值:內存占用率
            ? 作者:牽牛散步
            */
            int GetCpuStat()
            {
            ?SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
            ??? SYSTEM_TIME_INFORMATION??????? SysTimeInfo;
            ??? SYSTEM_BASIC_INFORMATION?????? SysBaseInfo;
            ??? double???????????????????????? dbIdleTime;
            ??? double???????????????????????? dbSystemTime;
            ??? LONG?????????????????????????? status;
            ??? LARGE_INTEGER????????????????? liOldIdleTime = {0,0};
            ??? LARGE_INTEGER????????????????? liOldSystemTime = {0,0};
            ?int UsageCpu = 0;
            ??? NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
            ??GetModuleHandle("ntdll"),
            ??"NtQuerySystemInformation"
            ??);
            ?
            ??? if (!NtQuerySystemInformation)
            ??????? return 0;
            ?
            ??? status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
            ??? if (status != NO_ERROR)
            ??????? return 0;
            ????
            ?for( int t = 0 ; t < 2 ; t++ )
            ??? {
            ??status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);
            ??????? if (status!=NO_ERROR)
            ??????????? return 0;
            ??
            ??????? status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
            ??????? if (status != NO_ERROR)
            ??????????? return 0;
            ??
            ??if (liOldIdleTime.QuadPart != 0)
            ??{
            ??????????? dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
            ??????????? dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);
            ???
            ??????????? dbIdleTime = dbIdleTime / dbSystemTime;
            ???

            ??????????? dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5;
            ???UsageCpu = (int)dbIdleTime;

            ??}
            ??
            ??????? // store new CPU's idle and system time
            ??????? liOldIdleTime = SysPerfInfo.liIdleTime;
            ??????? liOldSystemTime = SysTimeInfo.liKeSystemTime;
            ??
            ??????? // wait one second
            ??????? Sleep(500);
            ??? }
            ?return UsageCpu;
            ?
            }


            /*
            ? 功能:得到內存使用狀態
            ? 參數:無
            ? 返回值:內存信息結構體[包括總的物理內存,還可使用內存,虛擬內存,單位為K]
            ? 作者:牽牛散步
            */
            MemoryInf MemorySta()
            {
            ?MemoryInf tmp;//在ICE SLICE里定義的信息結構體
            ?MEMORYSTATUS memStatus;
            ?GlobalMemoryStatus(&memStatus);
            ?DWORD tom=memStatus.dwTotalPhys/1024;
            ?DWORD mem=memStatus.dwAvailPhys/1024;
            ?DWORD res=memStatus.dwAvailVirtual/1024;
            ?tmp.TotalMem = (int)tom;
            ?tmp.ValidMem = (int)mem;
            ?tmp.VirtualMem = (int)res;
            ?return tmp;
            }


            /*
            ?功能:得到硬盤使用情況
            ?參數:無
            ?返回值:硬盤信息結構體
            ?作者:牽牛散步
            */
            DiskInf GetDiskSta()
            {
            ?ULARGE_INTEGER FreeAvailable,TotalNum,TotalFreeNum;

            ?char p[3];
            ?bool b_flag;
            ?DiskInf tmp;//ICE SLICE里定義的硬盤信息結構體
            ?tmp.TotalSpace = 0;
            ?tmp.FreeSpace = 0;
            ?//得到有效的驅動器名,即盤符
            ?for( int drive = 1; drive <= 26; drive++ )
            ?{
            ??if( !_chdrive( drive ) )
            ??{
            ???memset( p , 0 , sizeof(p));
            ???p[0] = drive + 'A' - 1;
            ???p[1] = ':';
            ???p[2] = '\0';
            ???b_flag = GetDiskFreeSpaceEx( p ,&FreeAvailable,&TotalNum,&TotalFreeNum );
            ???if( b_flag )
            ???{
            ????tmp.TotalSpace += (int)(TotalNum.QuadPart/(1024*1024));
            ????tmp.FreeSpace += (int)(FreeAvailable.QuadPart/(1024*1024));
            ???}
            ??}
            ?}
            ?return tmp;
            }

            int main()
            {
            ???return 1;
            }

            posted on 2006-04-14 11:35 牽牛散步 閱讀(10698) 評論(3)  編輯 收藏 引用 所屬分類: C++學習資料
            Comments
            • # re: C++編程中,利用WINDOWS API獲得系統狀態信息[CPU占用率,硬盤使用情況,內存使用情況]
              javaer
              Posted @ 2007-03-30 18:40
              #include <Ice/Ice.h>
              #include <GetWinSysState.h>

              我想問你一下,缺這兩個庫,怎么辦?那里有?  回復  更多評論   
            • # re: C++編程中,利用WINDOWS API獲得系統狀態信息[CPU占用率,硬盤使用情況,內存使用情況]
              SHI
              Posted @ 2007-12-24 16:10
              GetWinSysState.h這個找不到怎么辦
                回復  更多評論   
            • # re: C++編程中,利用WINDOWS API獲得系統狀態信息[CPU占用率,硬盤使用情況,內存使用情況]
              好看網
              Posted @ 2010-08-05 11:19
              總的虛擬內存大小不知道怎么獲得 哎。

              那結構體 里的 TOTALMEMORY已經不是虛擬內存了。

              在windows核心編程里面寫的。  回復  更多評論   
             
            漂亮人妻被黑人久久精品| 国产高潮久久免费观看| 亚洲?V乱码久久精品蜜桃 | 色婷婷久久综合中文久久蜜桃av| 亚洲色欲久久久综合网东京热| 久久99久国产麻精品66| 国产精品99久久精品| 久久精品亚洲欧美日韩久久| 久久乐国产综合亚洲精品| 无码人妻久久一区二区三区免费丨 | 亚洲精品乱码久久久久久自慰| 久久久久国产精品熟女影院| 人人狠狠综合久久亚洲88| 久久精品国产一区二区三区不卡| 久久天天躁夜夜躁狠狠| 香蕉久久一区二区不卡无毒影院| 午夜精品久久久久久影视777| 久久国产精品久久久| 一级a性色生活片久久无| 91精品国产高清久久久久久国产嫩草 | 国产69精品久久久久APP下载 | 久久精品?ⅴ无码中文字幕| 亚洲AV无码久久| 亚洲国产精品一区二区三区久久| 久久国产亚洲精品无码| 久久精品国产99久久久古代| 久久国产成人亚洲精品影院| 久久国产精品无码一区二区三区| 久久婷婷是五月综合色狠狠| 久久久精品波多野结衣| 2020最新久久久视精品爱| 久久ZYZ资源站无码中文动漫| 久久人人爽人人爽人人片AV麻烦 | 亚洲色欲久久久久综合网 | 久久天天躁狠狠躁夜夜躁2O2O| 亚洲国产成人精品久久久国产成人一区二区三区综 | 欧美亚洲另类久久综合婷婷| 久久久精品久久久久特色影视 | 久久99九九国产免费看小说| 久久亚洲AV永久无码精品| 久久亚洲国产成人精品无码区|