• <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核心編程里面寫的。  回復  更多評論   
             
            精品久久久久久久久中文字幕| 久久久噜噜噜久久中文福利| 久久美女网站免费| 青青久久精品国产免费看 | 久久久国产视频| 久久免费看黄a级毛片| 久久久久久a亚洲欧洲aⅴ| 国产精品无码久久综合网| 久久精品aⅴ无码中文字字幕不卡| 伊人久久大香线蕉亚洲 | 无码乱码观看精品久久| 久久亚洲日韩精品一区二区三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久久久精品成人免费图片 | 久久综合国产乱子伦精品免费| 久久这里只有精品久久| 久久久国产精华液| 欧美成a人片免费看久久| 国产香蕉97碰碰久久人人| 精品午夜久久福利大片| 亚洲精品乱码久久久久久蜜桃图片| 久久夜色精品国产亚洲| 久久精品亚洲AV久久久无码| 国产精品久久自在自线观看| 久久久一本精品99久久精品66 | 久久人爽人人爽人人片AV| 无码任你躁久久久久久老妇 | 99久久99久久精品国产片果冻| 久久综合欧美成人| 国产一级做a爰片久久毛片| 久久天天婷婷五月俺也去| 国产精品久久久久久久| 伊人久久一区二区三区无码| 东方aⅴ免费观看久久av| 久久香蕉国产线看观看99| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久婷婷国产剧情内射白浆 | 国内精品久久久久伊人av| 久久精品国产亚洲AV不卡| 久久精品中文字幕有码| 97热久久免费频精品99|