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