如何在c++中使用GetProcessMemoryInfo

How to use GetProcessMemoryInfo in C++?

本文关键字:GetProcessMemoryInfo c++      更新时间:2023-10-16

我试图在Windows 7 32位的c++应用程序中使用psapi.hGetProcessMemoryInfo函数。

我按照一些教程做了如下操作:

PPROCESS_MEMORY_COUNTERS pMemCountr;
pMemCountr = new PROCESS_MEMORY_COUNTERS();
bool result = GetProcessMemoryInfo(GetCurrentProcess(),
                                   pMemCountr,
                                   sizeof(PPROCESS_MEMORY_COUNTERS));

问题是我总是从GetProcessMemoryInfo()方法的执行中获得"false"。我哪里做错了?

问题是

sizeof(PPROCESS_MEMORY_COUNTERS)

得到PPROCESS_MEMORY_COUNTERS的大小,它是一个PROCESS_MEMORY_COUNTERS*类型的指针(注意开头是双P)。

你想要的是

sizeof(PROCESS_MEMORY_COUNTERS)

如果没有new,你会过得更好:

PROCESS_MEMORY_COUNTERS memCounter;
BOOL result = GetProcessMemoryInfo(GetCurrentProcess(),
                                   &memCounter,
                                   sizeof( memCounter ));

change sizeof(PPROCESS_MEMORY_COUNTERS) to sizeof(PROCESS_MEMORY_COUNTERS)

On MSDN:

BOOL WINAPI GetProcessMemoryInfo( HANDLE进程中,Out PPROCESS_MEMORY_COUNTERSIn DWORD

);

的例子:

HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
printf( "nProcess ID: %un", processID );
// Print information about the memory usage of the process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (NULL == hProcess)
    return;
if (GetProcessMemoryInfo( ( hProcess, &pmc, sizeof(pmc)))
{
    printf( "tWorkingSetSize: 0x%08X - %un",  pmc.WorkingSetSize,  
                                              pmc.WorkingSetSize / 1024);        
    printf( "tQuotaPeakPagedPoolUsage: 0x%08X - %un", 
         pmc.QuotaPeakPagedPoolUsage ,   pmc.QuotaPeakPagedPoolUsage / 1024);
    printf( "tQuotaPagedPoolUsage: 0x%08X - %un", pmc.QuotaPagedPoolUsage, 
                                              pmc.QuotaPagedPoolUsage / 1024);
    printf( "tQuotaPeakNonPagedPoolUsage: 0x%08X - %un", 
               pmc.QuotaPeakNonPagedPoolUsage,pmc.QuotaPeakNonPagedPoolUsage / 1024 );
    printf( "tQuotaNonPagedPoolUsage:0x%08X-%un",pmc.QuotaNonPagedPoolUsage ,   pmc.QuotaNonPagedPoolUsage / 1024);
    printf( "tPagefileUsage: 0x%08X - %un", pmc.PagefileUsage,     pmc.PagefileUsage/1024 ); 
    printf( "tPeakPagefileUsage: 0x%08X - %un", pmc.PeakPagefileUsage, pmc.PeakPagefileUsage/1024 );
    printf( "tcb: 0x%08X - %un", pmc.cb , pmc.cb / 1024);     
}
CloseHandle(hProcess);

或者你可以从这里查看完整的代码

相关文章:
  • 没有找到相关文章