#post-id: 3572-22-26
#original-date: 7.05.2010 Fri
#original-time: 10:26 PM
#original-day: 3572
#original-host: WinXP Prof SP2 (Build 2600)
Решила развить свой AJPapps - Listening to player. Ведь всё равно, Мессенджер работает как и ListeningTo плагин для Миранды. Раз моя программа посылает Миранеде сведения об играемой музыке, так почему бы не делать тоже самое и с Мессенджером? Сказано - сделано. Нашёлся рисурс:
http://kentie.net/article/nowplaying/index.htm
Написано немного неряшливо, но в целом полезно. Начались опыты и модификация программы. Оказалось, что с моей программой Мессенджер не показывает музыку другим людям. Как же так? Начала ковыряться. Вроде всё верно, код верен, в заголовок идёт, а в контакт листе - тищина. Сначала думала dwData в COPYDATASTRUCT должно быть другим. Ан нет, начала мониторить MsnMsgrUIManager через Spy++ - всё нормально, WMP отсылает тоже самое, а всё равно не работает. Значит дело в строке. Как её вытащить, если Spy++ не может?
Закрываем Мессенджер, открываем VC++ 6, создаём GUI приложение, выбираем Typical Hello World application, а потом класс главного окна меняем на MsnMsgrUIManager. Потом идём в оконную функцию и пишем это:
Усё! Запускаем под отладчикам практически немодифицированную заготовку, врубаем музыку и смотрим в лог ^^ Получаем такие строки:
WMP\0Music\01\0{0} - {1}\0Eurofunk - Stop to Give Up Extended Version\0Initial D\0Super Eurobeat Presents Initial D Fourth Stage Best\0\0
WMP\0Music\00\0{0} - {1}\0\0\0\0\0
Разгадка была проста и банальна. on и off в строке работали, но не совсем. Заменила их по примеру на 1 и 0, и в контактлист пошла текущая музыка ^^ Меня просто смутила та страница, где написали, что on и off работают. Тоесть не написано, а в примере подписано ^^' Зря они так...
Итоговая функция выглядит теперь так:
Да здравствует смекалка и взаимовыручка ^_^
Одно плохо. В доках написано про фотматную строку. Она используется только в заголовке мессенджера. В контактлиск уходит предопределённая "Artist - Title". В моём случае (в foobar2000 плагин сам форматирует строку как красивее) используется только Title. В итоге, в конце появляется тире...
А ещё периодически мессенджер артачится и отказывается принимать команды. Защита от флуда? Или внутри что-то клинит?
#upd: АААААА!!! Я идиотка! Только что поняла, что не так с выводом песен. В буфере у меня UNICODE. Но буфер байтовый, так что передать нужно только количество байт. А в коде выше я умножала на 2 - ширину юникодовых символов! Происходил выход за проеделы буфера и чёрт знает что.
Исправила, вроде работает...
#music: Ace Warrior\Super Eurobeat, Vol.156\Fire On The Beat