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 
posted @ 2012-12-30 15:16  浪浪仔  阅读(12003)  评论(0编辑  收藏  举报