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;
運作結果如圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwleNRkTzEEVNhXS6hFMG1mYw50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM1czMzcTM3EzNyQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)