티스토리 뷰
오랜만에 '개발' 카테고리에 글을..ㅋ
엄밀히 말하자면 프로세스의 워킹셋 사이즈를 가져오는 루틴이라고 봐야죠.
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;
}
엄밀히 말하자면 프로세스의 워킹셋 사이즈를 가져오는 루틴이라고 봐야죠.
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;
}
'개발' 카테고리의 다른 글
응용 프로그램을 위한 최상의 사용자 환경을 만드는 방법 (0) | 2008.02.26 |
---|---|
simpleAdo 2.10 (0) | 2008.02.21 |
TCP/IP wouldblock 처리 (1) | 2007.07.27 |
Shock Sticker (1) | 2007.07.12 |
SciTE Editor 한글화하기.. (2) | 2007.07.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 램즈혼
- 산세베리아
- 레인보우샤크
- 금연
- 아쿠아스카이
- 채리새우
- Mpow
- 미니헤어그라스
- 루드위지아
- 수초어항
- C/C++
- ADO
- NAS
- 루드위지아 오발리스
- 노랭이새우
- ixus75
- 미에어2
- 133인치
- 쿠바펄
- 네온테트라
- 편도수술
- simpleAdo
- 오토씽
- 시내랑
- 캠핑
- 소설
- 챔픽스
- 마곡지구
- 하이그로필라
- 장기전세
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함