Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

заморочка с Handle окна НУЖНА ПОМОЩь

6.7K
13 сентября 2005 года
kasyava
28 / / 27.07.2005
Всем здрасти!!!!!! :)

Люди у меня такой вопрос, может быть он и глупый и вообще такого не возможно, но я всетаки решился его написать так как самостоятельно с этим разобраться мне не посилам....

Суть в следующем....
Мне нужно отследить висит прога или нет...
Я использую _IsHungAppWindow, для этого мне нужен Handle окна..

так вот.....

Как мне узнать Handle окна если я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу.
Но я знаю полный путь к экзешнику ну и имя экзешника соответственно.

Ну и еще я знаю имя процесса создаваемого в диспетчере задач этой прогой, хотя мне кажется что это не пригодиться, или нет??


Просьба не посылать меня на ПОИСК, я уже все излазил и везде предлогается исполизовать FindWinow..... :(

Помогите п л и и и и и и з з з з кто может,знает как это делается или кому интересно тоже помучаться....
585
13 сентября 2005 года
honeybeer
297 / / 06.09.2004
Код:
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);
    }
2.1K
13 сентября 2005 года
Kai
37 / / 30.05.2003
Цитата:
Originally posted by kasyava
я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу



Используй WinSight и все это узнаешь

246
13 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
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);
    }


А дальше?

585
13 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by GIZMO
А дальше?


А я почем знаю? Был нужен хэндл - мы его получили(hNeeded). А чего хочет kasyava я не знаю.

246
13 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by honeybeer
А я почем знаю? Был нужен хэндл - мы его получили(hNeeded). А чего хочет kasyava я не знаю.


Так в итоге нужен хендл окна, а не процесса. kasyav-е предлагается воспользоваться EnumWindows и pe32ProcList.th32ProcessID.

585
13 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by GIZMO
Так в итоге нужен хендл окна, а не процесса. kasyav-е предлагается воспользоваться EnumWindows и pe32ProcList.th32ProcessID.


Да, точно. Бес попутал.

585
13 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
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);
    }
}


 
Код:
LRESULT CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
if(dwPID == (DWORD)lParam){ghNeeded = hWnd; return false;}
return true;
}
246
13 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
 
Код:
if(!strcmp(pe32ProcList.szExeFile, "TOTALCMD.EXE"))
            {
            while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
            break;
            }
      }
   while(Process32Next(hProcSnap, &pe32ProcList));


а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно? А так у меня примерно тоже получилось.
585
13 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
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));) обязательно? А так у меня примерно тоже получилось.



Ну блин, совпало так совпало! А принципиальной разницы нету. Ну мне показалось, что так лучше. :D

246
14 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by GIZMO

а while (while(Process32Next(hProcSnap, &pe32ProcList));) обязательно?


А блин затупил, это нужно обязательно. Хотел сказать про этот while:

 
Код:
...
while(EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
...

вроде достаточно
 
Код:
...
if (!EnumWindows((WNDENUMPROC)EnumProc, pe32ProcList.th32ProcessID))
...


ну ладно разобрались вроде...
Honeybeer - приятно пообщаться с толковым человеком.
Kasyava - учи мат. часть.
Всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог