вот, нашёл я примерчик
вот тут
http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=cpp;action=display;num=1026813179некто
alexey_ma приводит пример нахождения ID процесса по названию , собственно, модуля...
вот моя переделка под VC++ с минимальнейшими изменениями:
#include "TLHELP32.h"
bool CGuard2View::GetProcessByExeName(DWORD* Pid,CString ExeName)
{
ExeName.MakeUpper();
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32=|0";
CString temp="";
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPALL,NULL);
if(hProcessSnap == (void*)-1)
{
::AfxMessageBox(" Snapshot failed");
return false;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32))temp=pe32.szExeFile;
temp.MakeUpper();
if(temp.Find(ExeName)!=-1)
{
*Pid=pe32.th32ProcessID;
CloseHandle (hProcessSnap);
return true;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
while(Process32Next(hProcessSnap,&pe32))
{
temp=pe32.szExeFile;
temp.MakeUpper();
if(temp.Find(ExeName)!=-1)
{
*Pid= pe32.th32ProcessID;
CloseHandle (hProcessSnap);
return true;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
}
CloseHandle (hProcessSnap);
*Pid=0;
return false;
}
собственно в моём случае меня интересовает только bool, то есть при успешном поиске - true.
вот это:
ExeName.MakeUpper();
для того, что вот здесь
if(Process32First(hProcessSnap,&pe32))temp=pe32.szExeFile;
получаем имя очередного процесса, и ОНО - в верхнем регистре, поэтому и сравниваем всё в верхнем
причём в pe32.szExeFile будет строка вроде
"C:\\PROGRAM FILES\\FIREBIRD\\FIREBIRD_1_5\\BIN\\FBGUARD.EXE", поэтому
можно на вход процедуре подать прямо путь к файлу - с именем файла (если нужно, конечно)
----------------------
и ещё
alexey_ma делает такое замечание:
"Для Win9x и 2000. (Для NT по другому)"
Отсюда вытекает вопрос: как проге узнать какая винда и как сделать сделанное выше под NT ?