○プロセスやメモリ使用量の取得
Windows NT,2000用です。Win98では動作しません。
アクセス権の無いプロセスを取得できません(systemなど。)
Psapi.h
Psapi.Lib
Psapi.dll
をMSDNなどで探してきます。
VS.netでは最初から入ってるみたいです。
実行ファイルができる場所にPsapi.dllを置きます。配布するときも一緒に配布。
プロジェクトに Psapi.Lib、Psapi.h を参加させます。
#include "Psapi.h"
#include <stdio.h>
-----------------------PIDを列挙します------------------------
//PIDを列挙します。
void pid(){
const int length = 1000;
DWORD pid[length];
DWORD len;
EnumProcesses (pid,length,&len);
len=len/sizeof(DWORD);
for(DWORD i=0;i<len;i++){
char buff[100]="";
sprintf(buff,"%d\n",pid[i]);
OutputDebugString(buff);//デバッグ出力
}
}
-----------------------PIDからプロセス名を求める--------------------
//PIDからプロセス名を求める
//アクセス権の無いプロセスを取得できません
//---------------使用方法----------------
//char buff[100]="";
//getProsessName(buff,sizeof(buff),1256);
//OutputDebugString(buff);
void getProsessName(char *name,int nameSize,DWORD pid){
HMODULE hMod[1000];
DWORD size=0;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pid);
if(hProcess!=NULL){
EnumProcessModules(hProcess, hMod, sizeof(hMod), &size);
DWORD ModNum = size / sizeof(HMODULE);
GetModuleBaseName(hProcess,hMod[0],name,nameSize);
CloseHandle(hProcess);
}else{
name[0]='\0';
}
////プロセスに含まれるすべてのモジュールを出力することも可能
// for(DWORD i=0; i<ModNum; i++) {
// char BaseName[1000]="";
// GetModuleBaseName(hProcess,hMod[i], BaseName, 1000);
// OutputDebugString(BaseName);
// OutputDebugString("\n");
// }
}
------------------------PIDから使用しているメモリを求める---------------------
//PIDから使用しているメモリを求める
//アクセス権の無いプロセスを取得できません
//---------------使用方法----------------
// PROCESS_MEMORY_COUNTERS MemInfo = getMemory(1256);
// char buff[100];
// sprintf(buff,"メモリ使用量%d\n", MemInfo.WorkingSetSize/1024);
// OutputDebugString(buff);
// sprintf(buff,"仮想メモリサイズ%d\n", MemInfo.PagefileUsage/1024);
// OutputDebugString(buff);
PROCESS_MEMORY_COUNTERS getMemory(DWORD pid){
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pid);
PROCESS_MEMORY_COUNTERS MemInfo;
MemInfo.WorkingSetSize=0;
MemInfo.PagefileUsage=0;
GetProcessMemoryInfo(hProcess, &MemInfo, sizeof(MemInfo));
CloseHandle(hProcess);
return MemInfo;
}
--------------------------応用編---------------------------
#include <string.h>
//プロセス名のPIDを返します。見つからなかった場合は0を返します。
DWORD getPID(char*pName){
const int length = 1000;
DWORD pid[length];
DWORD len;
EnumProcesses (pid,length,&len);
len=len/sizeof(DWORD);
for(DWORD i=0;i<len;i++){
char buff[100]="";
getProsessName(buff,sizeof(buff),pid[i]);
if(strcmp(buff,pName)==0) return pid[i];
}
return 0;
}
▲トップページ
>
Windows と C++