Стоит задача выравнивания всех окон по направляющим, эдакие "прилипающие" окна.
Со своими окнами проблем нет: перезаписываю позицию в событии WM_WINDOWPOSCHANGING.
Проблемы возникают с окнами других процессов. Пытался использовать хуки. По описанию должен подходить хук WH_GETMESSAGE, но события, связанные с перемещением окна или изменением его размеров, в нем не отлавливаются, т.е. их нет вообще. Хук WH_CBT не совсем подходит, там события приходят после совершения всех действий.
Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE.
И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией.
Сам проект на .NET, dll-ки на C++.
UPD. Наверняка, подобные темы уже обсуждались, буду рад ссылкам на похожие темы.
L>Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE. L>И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией.
Юзаем хук WH_CALLWNDPROCRET
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, Lomion, Вы писали:
L>>Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE. L>>И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией. C>Юзаем хук WH_CALLWNDPROCRET
PS: ну еще можно Accesbility-хук замутить. Но не везде будет работать.
Из плюсов:
1) для Accessible-хука не обязательно нужна DLL
2) Этот хук кладет на уровень привилеий, и будет работать даже в приложениях с повышенными правами.
Но не везде и не всегда. Всякие Гуглохромы да Оперы и иже с ними частенько идут побоку. Зависит с какими-настройками собирали код подобных приложений.
Там есть возможность фильтровать по событиям. Там не надо 32+64, там всё в одном.
Но (как и с обычными хуками) события от приложений, запущенных под админом, прилетать не будут. Нужно самому запускаться от админа.