코드 조각
Process 실행 체크 2
by 알 수 없는 사용자
2012. 4. 23.
바로 앞에 실행파일 체크 방법에는 문제점이 조금 있는데..
대소문자 구분 ,
Process_name은 똑같지만 실행파일 경로가 다른 경우에 대한 제대로된 체크를 하지 못한다.
실행파일 경로까지 체크하는 프로세스 실행 체크 함수는...
|
//---------------------------------------------------------------------------
#include <tlhelp32.h>
#include "Psapi.h"
#pragma link "psapi.lib"
bool __fastcall IsRunProcessEx( AnsiString sFullExeName )
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnapshot,&pe32);
AnsiString sExeName=ExtractFileName(sFullExeName).LowerCase();
sFullExeName=sFullExeName.LowerCase();
do
{
AnsiString sProcessExe = AnsiString(pe32.szExeFile).LowerCase();
if(sExeName == sProcessExe )
{
HWND hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pe32.th32ProcessID);
if(hProcess)
{
char sBuf[MAX_PATH]={0};
AnsiString sProcessPath;
if( GetModuleNameEx(hProcess, NULL,sBuf, MAX_PATH)) sProcessPath=sBuf;
CloseHandle(hProcess);
sProcessPath=sProcessPath.LowerCase();
if(sProcessPath == sFullExeName )
{
CloseHandle(hSnapshot);
return true;
}
}
}
}
while(Process32Next(hSnapshot,&pe32));
CloseHandle(hSnapshot);
return false;
}
| |
간단하다.
GetModuleNameEx 이라는 함수를 통해 ProcessID로 실행파일 명을 얻어와서 체크한다.
GetProcessImageFileName 라는 함수도 있는데..
이 api는 \\device\\harddisk0\\ 이런식으로 실제 imagefilename을 찾아준다.
그럼..