Добавляем в LastFM управление через панель задач

С появлением Windows 7 в системе появилась полезная фишка, позволяющая размещать элементы управления в панели задач, а именно в превью, которое высвечивается при наведении на элемент в панели. Однако, редко встретишь приложение, которое её использует. Из множества приложений, которыми я пользуюсь, на ум приходит только одно - Media Player Classic. Вот так выглядят элементы управления для него:

Так сложилось, что я люблю слушать "полу-радио", в частности, Last.fm. Но, к сожалению, в клиенте Last.fm нет поддержки этих модных кнопочек, поэтому мне захотелось добавить их в него собственноручно. Перечень действий, которые необходимо для этого, примерно следующий:
1. Находим хендл основного окна клиента.
2. Добавляем элементы управления.
3. Ставим свой обработчик оконных сообщений, в котором задаем поведение элементов управления.

Итак, приступим. Для начала, инклюды и файл ресурсов:

Файл ресурсов и несколько констант, которые понадобятся дальше:

Теперь перейдем к основному коду. Во-первых, объявим несколько глобальных переменных и один полезный макрос:

Далее реализуем функцию, которая будет "нажимать" кнопки по заданным координатам:

Почему именно эмуляция нажатия? Дело в том, что клиент Last.fm написан с использованием Qt, а там своеобразная модель взаимодействия элементов интерфейса, отличная от стандартной виндовой, поэтому вместо того, чтобы искать хендлы кнопок и посылать команды им, я упростил себе задачу и остановился на этом варианте. Тем более, положение элементов управления в окне (для которых мы будем делать "бинды") не меняется при ресайзе.
Пришла очередь обработчика оконных сообщений:

Идентификатора кнопки получается из wParam, так как того требует MSDN.
Теперь самая главная функция, которая добавит элементы управления для окна с указанным хендлом.

Основной этап пройден, осталось несколько мелких функций. Функция поиска хендла главного окна процесса:

Оставшаяся часть кода:

Теперь у нас есть готовая DLL, которую можно добавить в импорт к клиенту и получить желаемые элементы управления. В качестве иконок для элементов управления я использовал оригинальные изображения из клиента. Извлечь их довольно просто:
1. Смотрим где находится секция данных, например, с помощью CFF Explorer.

2. Пролистываем секцию в поисках заголовков стандартных изображений (в нашем случае PNG). И разрезаем на отдельные файлы, например, с помощью WinHex.

Теперь из них формируем файл размером 60х20 пикселей, и шаблон для кнопок готов. В результате получится примерно так:

Исходные коды и скомпилированная DLL: скачать

Добавляем в LastFM управление через панель задач: 14 комментариев

  1. В некоторых приложениях под семерку, в которых в процессе работы используется ProgressBar, прогресс также отображается прямо на кнопке приложения на панели задач (кнопка заполняется зелёным). Не знаешь, как добиться такого эффекта в своём приложении?

Добавить комментарий для Kaimi Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *