天天看點

C++和Qt 擷取系統CPU、記憶體和磁盤空間

1.CPU

用SYSTEM_INFO來擷取系統CPU的相關資訊。在WinBase.h頭檔案裡,可以找到結構體SYSTEM_INFO的定義。通過結構體可以通路到系統CPU資訊。

typedef struct _SYSTEM_INFO {
    union {
        DWORD dwOemId;          // Obsolete field...do not use
        struct {
            WORD wProcessorArchitecture;
            WORD wReserved;
        };
    };
    DWORD dwPageSize;
    LPVOID lpMinimumApplicationAddress;
    LPVOID lpMaximumApplicationAddress;
    DWORD_PTR dwActiveProcessorMask;//處理器掩碼
    DWORD dwNumberOfProcessors;//處理器個數
    DWORD dwProcessorType;//處理器類型
    DWORD dwAllocationGranularity;//
    WORD wProcessorLevel;//處理器等級
    WORD wProcessorRevision;//處理器版本
} SYSTEM_INFO, *LPSYSTEM_INFO;
           

2.記憶體Memory

用MEMORYSTATUSEX來擷取系統記憶體的相關資訊在WinBase.h頭檔案裡,可以找到結構體MEMORYSTATUSEX的定義。通過結構體可以通路到系統記憶體資訊。

typedef struct _MEMORYSTATUSEX {
    DWORD dwLength;
    DWORD dwMemoryLoad;//實體記憶體使用率
    DWORDLONG ullTotalPhys;//實體記憶體總量
    DWORDLONG ullAvailPhys;//可用的實體記憶體
    DWORDLONG ullTotalPageFile;//系統頁面檔案大小
    DWORDLONG ullAvailPageFile;//系統可用頁面檔案大小
    DWORDLONG ullTotalVirtual;//虛拟記憶體總量
    DWORDLONG ullAvailVirtual;//可用虛拟記憶體
    DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
           

3.硬碟大小

在WinBase.h裡提供了API –GetDiskFreeSpaceExW:

GetDiskFreeSpaceExW(
    __in_opt  LPCWSTR lpDirectoryName,//磁盤名,如“C:/”
    __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
    __out_opt PULARGE_INTEGER lpTotalNumberOfBytes,//總空間
    __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes//可用空間
    );
           

4.本文示例

包含頭檔案#include

#include <Windows.h>
#define MB (1024*1024)
#define GB (1024*1024*1024)
           

4.1擷取磁盤空間

////擷取硬碟空間
////driver:磁盤名
////flag:1-空閑磁盤大小;0-磁盤總大小
quint64 getDiskSpace(QString iDriver,int flag)
{
    ///磁盤名
    LPCWSTR strDriver=(LPCWSTR)iDriver.utf16();
    ULARGE_INTEGER freeDiskSpaceAvailable, totalDiskSpace, totalFreeDiskSpace;
    ///調用函數擷取磁盤參數(機關為位元組Byte)
    GetDiskFreeSpaceEx( strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace) ;
    if(flag==)
        return (quint64) totalDiskSpace.QuadPart/GB;
    else if(flag==)
        return (quint64) totalFreeDiskSpace.QuadPart/GB;
    else     
        return ;
} 
           

調用方法示例:

///聲明一個SYSTEM_INFO結構體對象
    SYSTEM_INFO systemInfo;
    GetSystemInfo(&systemInfo);//GetSystemInfo()傳回目前系統資訊
    cout<<"CPU "<<endl;
    cout<<"處理器掩碼:"<<systemInfo.dwActiveProcessorMask<<endl;
    cout<<"處理器個數:"<<systemInfo.dwNumberOfProcessors<<endl;
    cout<<"處理器類型:"<<systemInfo.dwProcessorType<<endl;
    cout<<"處理器等級:"<<systemInfo.wProcessorLevel<<endl;
    cout<<"處理器版本:"<<systemInfo.wProcessorRevision<<endl;

    MEMORYSTATUSEX memoryState;
    memoryState.dwLength = sizeof(memoryState);
    GlobalMemoryStatusEx(&memoryState);
    cout<<"\n記憶體\n"<<"實體記憶體使用率:"<<memoryState.dwMemoryLoad<<endl;
    cout<<"實體記憶體總量:"<<float(memoryState.ullTotalPhys)/GB<<"GB"<<endl;
    cout<<"可用的實體記憶體:"<<float(memoryState.ullAvailPhys)/GB<<"GB"<<endl;
    //cout<<"系統頁面檔案大小:"<<memoryState.ullTotalPageFile/MB<<"MB"<<endl;
    //cout<<"系統可用頁面檔案大小:"<<memoryState.ullAvailPageFile/MB<<"MB"<<endl;
    cout<<"虛拟記憶體總量:"<<float(memoryState.ullTotalVirtual)/GB<<"GB"<<endl;
    cout<<"可用的虛拟記憶體:"<<float(memoryState.ullAvailVirtual)/GB<<"GB"<<endl;

    cout<<"\n硬碟空間\n";
    ///總的硬碟大小
    quint64 diskC = getDiskSpace("C:/",);
    quint64 diskD = getDiskSpace("D:/",);
    quint64 diskE = getDiskSpace("E:/",);
    quint64 diskF = getDiskSpace("F:/",);
    quint64 diskG = getDiskSpace("G:/",);
    ///空閑硬碟大小
    ///quint64是Qt裡無符号的64位整型
    quint64 diskC1 = getDiskSpace("C:/",);
    quint64 diskD1 = getDiskSpace("D:/",);
    quint64 diskE1 = getDiskSpace("E:/",);
    quint64 diskF1 = getDiskSpace("F:/",);
    quint64 diskG1 = getDiskSpace("G:/",);
    cout<<"C-Total:"<<diskC<<"G\tFree:"<<diskC1<<"G"<<endl;
    cout<<"D-Total:"<<diskD<<"G\tFree:"<<diskD1<<"G"<<endl;
    cout<<"E-Total:"<<diskE<<"G\tFree:"<<diskE1<<"G"<<endl;
    cout<<"F-Total:"<<diskF<<"G\tFree:"<<diskF1<<"G"<<endl;
    cout<<"G-Total:"<<diskG<<"G\tFree:"<<diskG1<<"G"<<endl;
           

運作結果如圖:

C++和Qt 擷取系統CPU、記憶體和磁盤空間

繼續閱讀