Выравнивание окон по направляющим
От: Lomion  
Дата: 04.12.17 12:13
Оценка:
Всем привет.

Стоит задача выравнивания всех окон по направляющим, эдакие "прилипающие" окна.
Со своими окнами проблем нет: перезаписываю позицию в событии WM_WINDOWPOSCHANGING.
Проблемы возникают с окнами других процессов. Пытался использовать хуки. По описанию должен подходить хук WH_GETMESSAGE, но события, связанные с перемещением окна или изменением его размеров, в нем не отлавливаются, т.е. их нет вообще. Хук WH_CBT не совсем подходит, там события приходят после совершения всех действий.

Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE.
И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией.

Сам проект на .NET, dll-ки на C++.

UPD. Наверняка, подобные темы уже обсуждались, буду рад ссылкам на похожие темы.
Отредактировано 04.12.2017 12:15 Lomion . Предыдущая версия .
Re: Выравнивание окон по направляющим
От: Aniskin  
Дата: 04.12.17 12:22
Оценка:
Здравствуйте, Lomion, Вы писали:

L>Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п.


Вероятно, они приходят напрямую в оконную процедуру минуя очередь сообщений.

L>Может такие задачи решаются подменой оконных функций


Imho, да.

Ну и не стоит забывать, что нужны два хука, 32 и 64 битные.
Re: Выравнивание окон по направляющим
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.12.17 13:39
Оценка:
Здравствуйте, Lomion, Вы писали:


L>Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE.

L>И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией.
Юзаем хук WH_CALLWNDPROCRET
Aml Pages Home
Re[2]: Выравнивание окон по направляющим
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.12.17 13:39
Оценка:
Здравствуйте, Carc, Вы писали:

C>Юзаем хук WH_CALLWNDPROCRET
Aml Pages Home
Re[2]: Выравнивание окон по направляющим
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.12.17 13:44
Оценка:
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, Lomion, Вы писали:



L>>Собственно, не понятно, почему не приходят сообщения WM_WINDOWPOSCHANGING и т.п. в хуке WH_GETMESSAGE.

L>>И, в правильном ли направлении я иду? Может такие задачи решаются подменой оконных функций или чем-то другим, а я тут с обычными хуками копаюсь. Хотя подмена, на мой взгляд, это как-то уж чересчур, попахивает хакерством и черной магией.
C>Юзаем хук WH_CALLWNDPROCRET
PS: ну еще можно Accesbility-хук замутить. Но не везде будет работать.

Из плюсов:
1) для Accessible-хука не обязательно нужна DLL
2) Этот хук кладет на уровень привилеий, и будет работать даже в приложениях с повышенными правами.

Но не везде и не всегда. Всякие Гуглохромы да Оперы и иже с ними частенько идут побоку. Зависит с какими-настройками собирали код подобных приложений.
Aml Pages Home
Re: Выравнивание окон по направляющим
От: CEMb  
Дата: 05.12.17 02:52
Оценка: 4 (1)
Здравствуйте, Lomion, Вы писали:

SetWinEventHook

Там есть возможность фильтровать по событиям. Там не надо 32+64, там всё в одном.
Но (как и с обычными хуками) события от приложений, запущенных под админом, прилетать не будут. Нужно самому запускаться от админа.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.