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

Среда, 31. Август 2011
Раздел: C/C++, Windows, автор:

С появлением 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: скачать

 Обсудить на форуме


Получать обновления на почту:     

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


  1. няша :

    круто конечно, но хотелось бы что то про мбр+стилинг файлов =)

    [Ответить]


  2. Yakove :

    А как добавить dll в приложение? Просто положить в папку не помогло

    [Ответить]

    Kaimi:

    Как добавить dll в импорты описано, например, в предыдущей статье

    [Ответить]


  3. zloid :

    У меня от таких статей прям вдохновение и ощущение прикосновения к волшебству.

    [Ответить]


  4. zloid :

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

    [Ответить]

    Kaimi:

    http://msdn.microsoft.com/en-us/library/dd391698%28v=VS.85%29.aspx

    [Ответить]

    zloid:

    Спасибо!

    [Ответить]


  5. Artik :

    Импортировал, но кнопки не работают почему-то :(

    [Ответить]

    Kaimi:

    Не работают в смысле не отображаются или при нажатии ничего не происходит?

    [Ответить]

    Artik:

    Если свернут клиент, то при нажатии ничего не происходит. Если развернут - работает.

    [Ответить]

    Kaimi:

    Попробуй вариант отсюда http://kaimi.io/2011/10/lastfm-taskbar-controls-refining/

  6. [...] оказалось, библиотека для LastFM из статьи от 31.08.11 оказалась не особо юзабельной из-за нескольких [...]


  7. LestaD :

    Не то, использовать бы стандартные компоненты Windows

    [Ответить]

    Kaimi:

    Чего?

    [Ответить]


Оставьте ваш комментарий