информационная безопасность
без паники и всерьез
 подробно о проекте
Атака на InternetSpanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Модульный ботнет от русских хакеров 
 Торвальдс и вайбтестеры 
 Атака на GitHub 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Как по ID процесса получить хэндл главного окна этого процесса? 08.06.01 02:16  Число просмотров: 1500
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>

никак! тебе надо обратной дорогой пойти, т.е. вытаскивать из системы все хендлы окна, а затем сверять их с процессом, приблизительно вот так:


BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

tepedef struct _SEARCHING_HWND
{
DWORD dwProcessId; // ID процесса, который интересует
DWORD dwThreadId; // ID потока, если есть необходимостьж
HWND hwndImLookingFor; // HWND
} SEARCHING_HWND;

BOOL FindHwndOfCurrentProcess()
{
SEARCHING_HWND search;

search.dwProcessId = GetCurrentProcessId();
search.dwThreadId = 0; // поток не интересует или он у нас единственный
search.hwndImLookingFor = NULL;

EnumWindows(EnumWindowsProc, (LPARAM)&search);

return (search.hwndImLookingFor != NULL);
}

// CALLBACK EnumWindowsProc
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{

SEARCHING_HWND *search = (SEARCHING_HWND *)lParam;

DWORD dwThreadId = 0;
DWORD dwProcessId = 0;

dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (search->dwProcessId == dwProcessId)
{
if (search->dwThreadId == 0|search->dwThreadId == dwThreadId)
{
search->hwndImLookingFor = hwnd; // НАШЕЛ !
return FALSE; // остановись!
}
}
return TRUE; // не нашел, продолжай поиск
}
<programming>
[Win32] Как по ID процесса получить хэндл главного окна этого процесса? 08.06.01 01:01  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
[Win32] Как по ID процесса получить хэндл главного окна этого процесса? 08.06.01 02:16  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>

никак! тебе надо обратной дорогой пойти, т.е. вытаскивать из системы все хендлы окна, а затем сверять их с процессом, приблизительно вот так:


BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

tepedef struct _SEARCHING_HWND
{
DWORD dwProcessId; // ID процесса, который интересует
DWORD dwThreadId; // ID потока, если есть необходимостьж
HWND hwndImLookingFor; // HWND
} SEARCHING_HWND;

BOOL FindHwndOfCurrentProcess()
{
SEARCHING_HWND search;

search.dwProcessId = GetCurrentProcessId();
search.dwThreadId = 0; // поток не интересует или он у нас единственный
search.hwndImLookingFor = NULL;

EnumWindows(EnumWindowsProc, (LPARAM)&search);

return (search.hwndImLookingFor != NULL);
}

// CALLBACK EnumWindowsProc
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{

SEARCHING_HWND *search = (SEARCHING_HWND *)lParam;

DWORD dwThreadId = 0;
DWORD dwProcessId = 0;

dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (search->dwProcessId == dwProcessId)
{
if (search->dwThreadId == 0|search->dwThreadId == dwThreadId)
{
search->hwndImLookingFor = hwnd; // НАШЕЛ !
return FALSE; // остановись!
}
}
return TRUE; // не нашел, продолжай поиск
}
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach