windows程序設計 win32 API 獲取系統內存信息 GlobalMemoryStatus 和 GlobalMemoryStatusEx


1、獲取系統內存信息有2個api,分別是GlobalMemoryStatus和GlobalMemoryStatusEx

GlobalMemoryStatus函數可以在C語言咧直接調用,但是GlobalMemoryStatusEx卻不可以直接調用

2、看看這2個函數的不同,總的來說這2個函數都可以獲取到內存信息,但是GlobalMemoryStatusEx函數是GlobalMemoryStatus函數的增強,

GlobalMemoryStatus雖然可以獲取,但當你的機器里裝了2條內存條是,她只能獲取到一條的內存信息容量,

而GlobalMemoryStatusEx函數卻可以獲取到所有,只要你系統識別的內存大小

3、看看2 個函數分別怎么用吧!

3.1、先看GlobalMemoryStatus函數,這個函數可以直接調用:

MEMORYSTATUS status//定義存放內存信息的變量
GlobalMemoryStatus(&status);//調用GlobalMemoryStatus函數獲取內存信息
//對得到的內存信息處理現實處理
TCHAR ss[256];
ZeroMemory(ss,sizeof(ss)/sizeof(TCHAR));
wsprintf(ss,"%d KB",status.dwTotalPhys/1000);//現實內存大小
MessageBox(hwndDlg,ss,TEXT(""),MB_OK);

3.2、GlobalMemoryStatusEx函數就沒有那么容易調用了,它在C語言里不能直接調用,他被寫在了系統的kernel32.dll動態鏈接庫里面,所以我們要在C語言里調用系統的動態鏈接庫DLL

直接上代碼吧:

/*
 *這里寫了個調用kernel32.dll動態鏈接庫里GlobalMemoryStatusEx函數的函數
**/
#include <windows.h>
typedef   void(WINAPI*   FunctionGlobalMemoryStatusEx)(LPMEMORYSTATUS);//聲明函數原型指針
MEMORYSTATUS GetMemoryStatus()
{
	HMODULE hModule;
	FunctionGlobalMemoryStatusEx GlobalMemoryStatusEx;
	MEMORYSTATUS status;
	status.dwLength = sizeof(status);
	hModule = LoadLibrary("kernel32.dll");//載入動態鏈接庫kernel32.dll,返回它的句柄
	if(NULL==hModule)//判斷載入dll是否成功
	{
		//error.
		//MessageBox(NULL,TEXT("載入動態鏈接庫kernel32.dll"),TEXT("錯誤"),MB_OK|MB_ICONERROR);
		return;
	}
        //在kernel32.dll句柄里查找GlobalMemoryStatusEx函數,返回改函數的指針
	GlobalMemoryStatusEx   =(FunctionGlobalMemoryStatusEx)GetProcAddress(hModule,"GlobalMemoryStatusEx");
	if(NULL==GlobalMemoryStatusEx)//判斷函數是否找到
	{
		//error
		//MessageBox(hwndDlg,TEXT("函數查找不到"),TEXT("錯誤"),MB_OK|MB_ICONERROR);
		return;
	}
	GlobalMemoryStatusEx(&status);//調用函數取得系統的內存情況
	FreeLibrary(hModule);//釋放鏈接庫句柄
	return status;
}
給下效果圖吧,我的機器是4G內存,2跟2G的內存,由於裝的是XP系統,所以只能識別3G內存:
GlobalMemoryStatus:
image 
GlobalMemoryStatusEx:
image 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM