获取WIN10进程所占内存

 GetProcessMemoryInfo函数xp使用正常,在Win10上使用不正常.函数的功能已被kernel32.dll中的K32GetProcessMemoryInfo替代.因此在Win10采用动态调用的方法,如下:

#include <windows.h>
#include <psapi.h>
typedef BOOL (WINAPI *PGET_PROCESS_MEMORY_INFO)(HANDLE handle,
            PROCESS_MEMORY_COUNTERS* memCounters, DWORD cb);
static PGET_PROCESS_MEMORY_INFO GCGetProcessMemoryInfo = 0;

HINSTANCE hKernel32DLL=LoadLibrary("kernel32.dll");//加载dll库
if(hKernel32DLL)
{
       GCGetProcessMemoryInfo = (PGET_PROCESS_MEMORY_INFO)GetProcAddress(hKernel32DLL,"K32GetProcessMemoryInfo");

       if(!GCGetProcessMemoryInfo) return "内存占用:%0.0MB峰值:%0.0MB";

       DWORD dwProcessID = GetCurrentProcessId();

       HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ, NULL, dwProcessID);

       PROCESS_MEMORY_COUNTERS process_mem_counters = {0};

       process_mem_counters.cb = sizeof(PROCESS_MEMORY_COUNTERS);

       DWORD bRet = GCGetProcessMemoryInfo(hProcess, &process_mem_counters,sizeof(PROCESS_MEMORY_COUNTERS));

       AnsiString strTemp = AnsiString().sprintf("内存占用:%0.2fMB峰值:%0.2fMB",
          process_mem_counters.WorkingSetSize/1024.0/1024.0,
          process_mem_counters.PeakWorkingSetSize/1024.0/1024.0);

       CloseHandle(hProcess);

       return strTemp;
}

if(hKernel32DLL)//卸载dll
{
      FreeLibrary(hKernel32DLL);
      hKernel32DLL = NULL;
}

在Win10上获取的是程序集内存,不是内存(专用程序集),如果程序既要在xp上使用,又要在Win10上使用,需要判断一下Windows的版本。新的开发工具,可以直接GetProcessMemoryInfo,对于老的开发工具,如VC6,BCB6等才需要如上代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值