출처 : http://likehood.tistory.com/69
오랜만에 '개발' 카테고리에 글을..ㅋ
엄밀히 말하자면 프로세스의 워킹셋 사이즈를 가져오는 루틴이라고 봐야죠.
NT 4.0에서는 GetProcessMemoryInfo()을 호출할 때
"The program issued a command but the command lenght is incorrect" 라는 메세지 박스를 띄우는군요. Windows 업데이트문제인듯 한데..혹시 아시는 분 지혜를 부탁드릴께요~
#pragma comment(lib,"Psapi.lib")
#include "psapi.h"
DWORD GetUsingMemorySize(CString strProcessName)
{
DWORD pid[1024];
DWORD cb;
EnumProcesses(pid,sizeof(DWORD)*1024,&cb);
HMODULE hMo;
CString strAll;
for(int i = 0 ; i < 1024 ; ++i)
{
char szFileName[1024];
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,pid[i]);
if(!hProcess)
continue;
BOOL bb=EnumProcessModules(hProcess,&hMo,sizeof(hMo),&cb);
if(!bb)
{
DWORD error=GetLastError();
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_FROM_SYSTEM
|FORMAT_MESSAGE_IGNORE_INSERTS
, NULL,error,0,(LPSTR)&lpMsgBuf,0,NULL);
CString strLastErrMsg=static_cast<LPCSTR>(lpMsgBuf);
LocalFree(lpMsgBuf);
CloseHandle(hProcess);
continue;
}
GetModuleFileNameEx(hProcess,hMo,szFileName,1024);
CString strProcName(szFileName);
if(strProcName.Find(strProcessName) != -1 )
{
PROCESS_MEMORY_COUNTERS mem;
GetProcessMemoryInfo(hProcess,&mem,sizeof(PROCESS_MEMORY_COUNTERS));
CloseHandle(hProcess);
return mem.WorkingSetSize;
}
CloseHandle(hProcess);
}
return NULL;
}
- Posted
- Filed under Development/C++