在Windows XP上获得总内存

时间:2015-08-10 22:27:53

标签: c windows

Alrighly。所以。我的目标是在Windows XP-10上获得总系统内存。我可以在windows vista及更高版本上使用GetPhysicallyInstalledSystemMemory。它就像一个魅力:)然而,在Windows XP上我必须使用GlobalMemoryStatusEx,它不考虑硬件保留内存。因此,它将报告,例如,511Mb而不是512Mb。关于如何解决这个问题的任何线索?

这是我到目前为止所拥有的。再次。它只适用于XP

#define _WIN32_WINNT  0x501
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

typedef (CALLBACK *GPIM)(PULONGLONG);

int GetTotalRam()
{
    unsigned long long total;
    FARPROC FuncAddr = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetPhysicallyInstalledSystemMemory");
    if (FuncAddr)
    {
        ((GPIM)FuncAddr)(&total);
    }
    else
    {
        MEMORYSTATUSEX ms;
        memset(&ms, 0, sizeof(MEMORYSTATUSEX));
        ms.dwLength = sizeof(MEMORYSTATUSEX);
        GlobalMemoryStatusEx(&ms);
        total = ms.ullTotalPhys / 1024;
    }
    total /= 1024;
    return (int)total;
}

0 个答案:

没有答案