HANDLE hProcSnap = NULL, hNeeded = NULL;
PROCESSENTRY32 pe32ProcList;
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "firefox.exe"))
{
hNeeded = OpenProcess(PROCESS_ALL_ACCESS, true, pe32ProcList.th32ProcessID);
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hNeeded)CloseHandle(hNeeded);
if(hProcSnap)CloseHandle(hProcSnap);
}
заморочка с Handle окна НУЖНА ПОМОЩь
Люди у меня такой вопрос, может быть он и глупый и вообще такого не возможно, но я всетаки решился его написать так как самостоятельно с этим разобраться мне не посилам....
Суть в следующем....
Мне нужно отследить висит прога или нет...
Я использую _IsHungAppWindow, для этого мне нужен Handle окна..
так вот.....
Как мне узнать Handle окна если я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу.
Но я знаю полный путь к экзешнику ну и имя экзешника соответственно.
Ну и еще я знаю имя процесса создаваемого в диспетчере задач этой прогой, хотя мне кажется что это не пригодиться, или нет??
Просьба не посылать меня на ПОИСК, я уже все излазил и везде предлогается исполизовать FindWinow..... :(
Помогите п л и и и и и и з з з з кто может,знает как это делается или кому интересно тоже помучаться....
Цитата:
Originally posted by kasyava
я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу
я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу
Используй WinSight и все это узнаешь
Цитата:
Originally posted by honeybeer
Код:
HANDLE hProcSnap = NULL, hNeeded = NULL;
PROCESSENTRY32 pe32ProcList;
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "firefox.exe"))
{
hNeeded = OpenProcess(PROCESS_ALL_ACCESS, true, pe32ProcList.th32ProcessID);
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hNeeded)CloseHandle(hNeeded);
if(hProcSnap)CloseHandle(hProcSnap);
}
PROCESSENTRY32 pe32ProcList;
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "firefox.exe"))
{
hNeeded = OpenProcess(PROCESS_ALL_ACCESS, true, pe32ProcList.th32ProcessID);
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hNeeded)CloseHandle(hNeeded);
if(hProcSnap)CloseHandle(hProcSnap);
}
А дальше?
Цитата:
Originally posted by GIZMO
А дальше?
А дальше?
А я почем знаю? Был нужен хэндл - мы его получили(hNeeded). А чего хочет kasyava я не знаю.
Цитата:
Originally posted by honeybeer
А я почем знаю? Был нужен хэндл - мы его получили(hNeeded). А чего хочет kasyava я не знаю.
А я почем знаю? Был нужен хэндл - мы его получили(hNeeded). А чего хочет kasyava я не знаю.
Так в итоге нужен хендл окна, а не процесса. kasyav-е предлагается воспользоваться EnumWindows и pe32ProcList.th32ProcessID.
Цитата:
Originally posted by GIZMO
Так в итоге нужен хендл окна, а не процесса. kasyav-е предлагается воспользоваться EnumWindows и pe32ProcList.th32ProcessID.
Так в итоге нужен хендл окна, а не процесса. kasyav-е предлагается воспользоваться EnumWindows и pe32ProcList.th32ProcessID.
Да, точно. Бес попутал.
Цитата:
Originally posted by honeybeer
Да, точно. Бес попутал.
Да, точно. Бес попутал.
Код:
HANDLE ghNeeded = NULL;// это он, сволочь
Код:
void Func(void)
{
HANDLE hProcSnap = NULL;
PROCESSENTRY32 pe32ProcList;
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hProcSnap)CloseHandle(hProcSnap);
}
}
{
HANDLE hProcSnap = NULL;
PROCESSENTRY32 pe32ProcList;
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hProcSnap)CloseHandle(hProcSnap);
}
}
Код:
LRESULT CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
if(dwPID == (DWORD)lParam){ghNeeded = hWnd; return false;}
return true;
}
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
if(dwPID == (DWORD)lParam){ghNeeded = hWnd; return false;}
return true;
}
Код:
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно? А так у меня примерно тоже получилось.
Цитата:
Originally posted by GIZMO
[CODE}
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
[/CODE]
а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно? А так у меня примерно тоже получилось.
[CODE}
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
{
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
[/CODE]
а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно? А так у меня примерно тоже получилось.
Ну блин, совпало так совпало! А принципиальной разницы нету. Ну мне показалось, что так лучше. :D
Цитата:
Originally posted by GIZMO
а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно?
а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно?
А блин затупил, это нужно обязательно. Хотел сказать про этот while:
Код:
...
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
...
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
...
вроде достаточно
Код:
...
if (!EnumWindows((WNDENUMPROC)EnumProc, pe32ProcList.th32ProcessID))
...
if (!EnumWindows((WNDENUMPROC)EnumProc, pe32ProcList.th32ProcessID))
...
ну ладно разобрались вроде...
Honeybeer - приятно пообщаться с толковым человеком.
Kasyava - учи мат. часть.
Всем спасибо.