![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли по ID просесса узнать хендл окна этого просесса ? [D5, WinXP]
-=SS=- © (2004-12-15 18:17:00)Собственно ИМХО может кто знает какие - то апишные функции
зараннее благодарен
Leonid Troyanovsky (2004-12-15 21:20:00) [41]
> -=SS=- © (15.12.04 19:36) [5]
> Функция GetWindowThreadProcessId требует handle окна.
> Что туда передавать ? если я не знаю handl-ов окон мне их
> нужно получить.
var
h: HWND;
pid: DWord;
h := FindWindowEx(0, 0, nil, nil);
while (h <> 0) do
begin
GetWindowThreadProcessId(h, @pid);
if (pid = pi.dwProcessId) then
{окно принадлежит потоку запущенного процесса}
h := FindWindowEx(0, h, nil, nil); // ищем следующее окно
end;
--
С уважением, LVT.
-=SS=- (2004-12-15 20:09:00) [42]Теперь понял ... Большое спасибо за наводку
Суслик (2004-12-15 19:49:00) [43]1. Ты знаешь id процесса.
2. Для того, чтобы найти все окна, принадлежащие данному процессу, нужно перебрать все окна в системе. Т.е. получить последовательно handle всех окон.
3. Получив handle очередного окна ты используя указанную мной функцию проверяешь принадлежит ли окно процессу (заметь, что нужно передавать указатель на id процесса, а не брать результат функции - это стандратная ошибка).
Теперь о том, как перебрать окна. Ответ - не знаю, т.к. никогда не делал этого. Но уверен, что если начать копать, начиная с функции win api enumwindows, то обязательно добъешься успеха.
-=SS=- (2004-12-15 19:36:00) [44]Функция GetWindowThreadProcessId требует handle окна.
Что туда передавать ? если я не знаю handl-ов окон мне их нужно получить.
Для теста передаю туда 0 на выходе получаю 0.
Что делать ?
Зараннее спасибо!
Суслик (2004-12-15 19:21:00) [45]Ну напрагись, задай вопрос нормально :)) С знаком вопроса, с запятыми и пр.
Я не издеваюсь, я вопроса не понял. Честно. :)
-=SS=- (2004-12-15 19:18:00) [46]Огромное спасибо за направление но всё же
DWORD GetWindowThreadProcessId(
HWND hWnd, // handle of window
LPDWORD lpdwProcessId // address of variable for process identifier
);
что опередавать в hWnd если у меня никакого окна нету предаю 0 ноль и возвращает :(
Юрий Зотов (2004-12-15 18:31:00) [47]> -=SS=- © (15.12.04 18:17)
> Можно ли по ID просесса узнать хендл окна этого просесса?
Задумайтесь на минутку - а что, если процесс породил несколько окон? Какое из них Вам нужно? А ведь такое бывает очень часто.
Как сказано в [1], можно перебрать все окна процесса. Но для того, чтобы выделить из них нужное Вы должны знать об этом окне еще что-то, кроме того, что оно принажлежит данномк процессу.
Суслик (2004-12-15 18:19:00) [48]можно по хандлу окна узнать принадлежит ли он процесу
The GetWindowThreadProcessIdfunction retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window.
т.е. можно все окна пребрать.
Может иначе можно, я не знаю.