Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сообщения окна  (Прочитано 11342 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 17-01-2007 05:28 » 

Привет форумчане.
Столкнулся с тем что нужно кое что наваять на ВинАпи. Потому как личного опыта работы с данной технологией явно маловато, то возникла проблемка.
Если кто знает подскажите пожалуйста.

Имею HWND нужного мне окна. Теперь мне нужно как-то отлавливать сообщения этого окна, а в частности отлавливать момент ресайзинга этого окна и получать его координаты ( например от левых верхнего и нижнего углов ).

Подсобите плизз. Дайте ссылочек на информацию ( готового кода не прошу Улыбаюсь )
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 17-01-2007 06:52 » 

Если окно не твоё, и к его исходникам доступа не имеешь - наверно, хуки вешаются.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 17-01-2007 13:37 » 

Если окно создается не в твоем проекте, то как сказал dimka нужны глобальные хуки. В частности посмотри функцию SetWindowsHookEx тут , Думаю тебе подойдет тип хука WH_CALLWNDPROC.

Если окно создается в твоем приложении, можно субкласировать класс окна.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zubr
Гость
« Ответ #3 : 18-01-2007 04:54 » 

Или внедрившись в контекст процесса, которому принадлежит окно, с помощью хука, субклассировать окно.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 18-01-2007 05:43 » 

Спасибо за ответы Улыбаюсь Всё меняется Улыбаюсь
В общем так :
 Есть апликашка с кучеё кнопок, лэйблов и т.д. На форме есть панель, а в неё вставлен ActiveX объект.
 Если верить Spy++ , то в панели этот ActiveX объект создаёт ещё несколько своих окон дочерних от панели.
 Мне необходимо получить все дочерние окна этой панели.
 Проблемы :
   1. Поиск нужного окна осуществляю с помощью FindWindow (пробовал и с помощью FindWindowEx). Всё работает, но нужно указывать стринговое имя нужного окна. Есть ли возможность найти нужное окно без указания названия ? Если есть то подскажите как пожалуйста. А то в зависимости от настроек ActiveX объекта, его окна меняют названия Жаль
   2. Киньте ссылочку на описание того как перебрать все дочерние окна, имея HWND окна родительского.

Спасибо.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 18-01-2007 10:51 » 

Код:
BOOL CALLBACK EnumWindowsWnd(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
....///Что-то делаем с окном
EnumChildWindows(hwnd,&EnumChildWnd,0); //Перебираем всех детей
return TRUE;
}

while (TRUE)
{
EnumWindows(&EnumWindowsWnd, 0);
}

Ну и для чилдренов по анналогии

« Последнее редактирование: 18-01-2007 10:53 от nikedeforest » Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 18-01-2007 10:52 » 

Есть ли возможность найти нужное окно без указания названия ?

А как ты определяешь "нужное"? Если его хендл и имя постоянно меняются? Хоть координаты-то остаются постоянными? Относительно родительского окна? Тогда можно по ним попробовать. Или z-order, опять же, если он постоянный. Например, нужное тебе окно всегда третье в z-order. Иначе - не знаю.

Цитата
Киньте ссылочку на описание того как перебрать все дочерние окна, имея HWND окна родительского.

ИМХО, на форуме уже где-то было. Даже подробно, с кодом.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zubr
Гость
« Ответ #7 : 18-01-2007 17:07 » 

Как вариант, можно FindWindow только по классу окна делать (ведь класс окна не меняется) и проверять по GetParent. В общем, зависит от того, насколько сложна структура окон и насколько одинаковы названия классов окон.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 19-01-2007 05:31 » 

Всем спасибо! Проблема решена.
Я всё-таки неправильно объяснил что мне было нужно.
Получить все дочерние окна мне нужно было для того, чтобы получить хэндл последнего чайлда (именно он и ресайзится по даблклику). В  этом последнем окне ActiveX проигрывает видео, и мне нужно было отловить момент его ресайзинга(фуллскрин или нет. даблклик отловить не смог потому что ActiveX не предоставляет такого события. ). С помощью Spy++ выяснил что при фуллскрин моде, ActiveX сроздаёт новое окно, которое не является дочерним от самой формы и запускается в контексте процесса апликации в отдельном треде. Т.е. окно самой апликации в момент фуллскрина становится неактивным и активируется новое окно. Получить хэндл активного окна оказалось очень просто Улыбаюсь
HWND hwnd = GetForegroundWindow();
Вот и всё Улыбаюсь Далее уже дело техники.

Спасибо ещё раз всем участникам, и сорри за то что бестолково объяснил задачу.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines