15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


PostMsg - Посылаем сообщения в любое окно на десктопе


Автор: Matt Spaulding.

Требования: Windows NT/2000, Visual C++ 6.0

Описание:

Однажды при запуске утилиты оптимизации проекта VC++ мне потребовалась программа которая позволила бы завершить COM сервер из другого процесса. Без модификации исходного кода, лучший способ, который приходил на ум, это было простая отправка сообщения завершения (quit) главному окну приложения сервера. Тогда я запустил небольшую удобную утилиту SPY++ и нашёл своё окно в списке, но к моему разочарованию я не смог ничего сделать с ним. поэтому было принято решиние написать PostMsg.

Функциональные возможности:

PostMsg - это небольшое диалоговое приложение, которое подражает некоторым функциональным возможностям SPY++, в том плане, что получает список всех окон на текущем рабочем столе и отображает их в стандартном элементе управления дерева (tree control) подобно SPY++. Далее нам необходим список общих оконных сообщений, чтобы можно было выбрать. PostMsg использует файл msg.dat, который был в основном взят из winuser.h и включает два значения для каждого сообщения: шестнадцатиричное и десятичное. PostMsg, будет искать msg.dat в директории, из которой она была запущена. Если Вам захочется использовать новые сообщения, то необходимо их добавить в msg.dat и перезапустить приложение. PostMsg так же обеспечивает регистро-независимый способ поиска подстроки определённого заголовка окна.

Технология:

Чтобы создать список окон на текущем десктопе, PostMsg использует API функцию ::EnumChildWindows(). Учитывая то, как ::EnumChildWindows() делает итерации по окну списка, я использовал обратно-зависимый цикл через CTreeCtrl::GetParentItem(), чтобы определить правильность добавления каждого окна в дерево. Подпрограмма поиска, является рекурсивной функцией, так как она проста в чтении, маленького размера, поэтому она похожа на рекурсивное решение.

Примечания Автора:

Я добавил пару кнопок Hide (Скрыть) и Show (Показать), чтобы можно было быстро манипулировать окнами. На мой вгляд эти кнопки очень полезны для тех приложений, которые не имеют значка на панели задач или непозволяют Вам изменить его местоположение или минимизировать. В данном случае, самыми главными кандидатоми являются окна с баннерами.

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

Downloads

Скачать исходник - 31 Kb