DWORD SystemInfo::findProcess(char* strProcessName)
{
DWORD aProcesses[1024]={0};
DWORD cbNeeded=0;
DWORD cbMNeeded=0;
HMODULE hMods[1024];
HANDLE hProcess;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
{
char szProcessName[MAX_PATH]={0};
if (aProcesses[i] != 0)
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
if (hProcess != NULL)
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) //枚举进程模块信息
{
GetModuleBaseNameA( hProcess, hMod, szProcessName, sizeof(szProcessName) ); //取得主模块全名,每个进程第一模块则为进程主模块
if(strstr(szProcessName, strProcessName))
{
CloseHandle(hProcess);
return(aProcesses[i]);
}
}
CloseHandle(hProcess);
}
}
}
return 0;
}