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:
GlobalMemoryStatusEx: