windows程序设计 win32 API 获取系统内存信息 GlobalMemoryStatus 和 GlobalMemoryStatusEx

来源:互联网 发布:阿里云推广 产品 编辑:程序博客网 时间:2024/05/01 19:12

原文地址:http://www.cnblogs.com/llz5023/archive/2012/12/30/2839776.html


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 

0 0
原创粉丝点击