入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

win 32Api获取系统内存函数

创建时间:2016-09-21 投稿人: 浏览次数:1388


windows编程中 获取系统内存信息有2个api,分别是GlobalMemoryStatus和GlobalMemoryStatusEx,GlobalMemoryStatus函数可以在C语言咧直接调用,但是GlobalMemoryStatusEx却不可以直接调用,因为GlobalMemoryStatusEx被写在了系统的kernel32.dll动态链接库里面,所以我们在使用GlobalMemoryStatusEx要加载kernel32.dll库


2个函数的不同点:

总的来说这2个函数都可以获取到内存信息,但是GlobalMemoryStatusEx函数是GlobalMemoryStatus函数的增强,GlobalMemoryStatus虽然可以获取,但当你的机器里装了2条内存条是,她只能获取到一条的内存信息容量,而GlobalMemoryStatusEx函数却可以获取到所有,只要你系统识别的内存大小

1、GlobalMemoryStatus函数的用法:

引用头文件#include <windows.h>

MEMORYSTATUS CMemoryFunction::GetMemoryStatus()
{
	MEMORYSTATUS status;//定义存放内存信息的变量
	GlobalMemoryStatus(&status);//调用GlobalMemoryStatus函数获取内存信息
	 SIZE_T phyPart = status.dwTotalPhys/1000/1000;
	std::cout<<"PartPhysMemory:"<<phyPart<<"M"<<std::endl;
	return status;

}

2、GlobalMemoryStatusEx函数的用法:

typedef   void(WINAPI*   FunctionGlobalMemoryStatusEx)(LPMEMORYSTATUSEX);//声明函数原型指针
MEMORYSTATUSEX CMemoryFunction::GetMemoryStatusEx()
{
	HMODULE hModule;
	FunctionGlobalMemoryStatusEx GlobalMemoryStatusEx;
	MEMORYSTATUSEX status;
	status.dwLength = sizeof(status);
	LPCWSTR dllName = L"kernel32.dll";
	hModule = LoadLibrary(dllName);//载入动态链接库kernel32.dll,返回它的句柄
	if(NULL==hModule)//判断载入dll是否成功
	{
		return status;
	}
	//在kernel32.dll句柄里查找GlobalMemoryStatusEx函数,返回改函数的指针
	GlobalMemoryStatusEx   =(FunctionGlobalMemoryStatusEx)GetProcAddress(hModule,"GlobalMemoryStatusEx");
	if(NULL==GlobalMemoryStatusEx)//判断函数是否找到
	{
		return status;

	}
	GlobalMemoryStatusEx(&status);//调用函数取得系统的内存情况
	FreeLibrary(hModule);//释放链接库句柄
	DWORDLONG phyAll = status.ullTotalPhys/1000/1000;
	std::cout<<"AllPhysMemory:"<<phyAll<<"M"<<std::endl;
	return status;

}


本机运行结果





声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像