
Как получить название текущего трека из Winamp и AIMP
Winamp был и остается самым популярным мультимедийным плеером для Windows. Такая популярность не могла остаться незамеченной, поэтому появились программы, использующие информацию из него в своих целях. Например, плагины для интернет-мессенджеров устанавливают название воспроизводимого трека в качестве статуса, а моя программа My Music Web Agent отправляет эту информацию в интернет. Для взаимодействия сторонних приложений с Winamp был разработан интерфейс API со своими командами и синтаксисом. По какой-то причине разработчики Winamp сейчас вообще убрали с сайта информацию об API, но в интернете эти данные остались. Я приложил описание Winamp Application Programming Interface в архиве с примером программы, рекомендую ознакомиться с ним перед прочтением статьи, чтобы не возникало вопросов откуда взялись те или иные значения.Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; Название класса окна Winamp/AIMP
- wcl db 'Winamp v1.x',0
- buff rb 300h ; Буфер для получения текста из заголовка окна
- play_now rb 300h ; Буфер для получения названия трека
Code (Assembler) : Убрать нумерацию
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Получить хэндл окна Winamp
- invoke FindWindow,wcl,0
- or eax,eax
- ; Окно Winamp не найдено
- jz .no_winamp
- ; Сохранить хэндл окна
- mov ebx,eax
- ; Что-то сейчас воспроизводится?
- invoke SendMessage,ebx,WM_USER,NULL,104
- cmp eax,1
- ; Winamp не находится в состоянии "Play"
- jne .no_winamp
- ...
Городить огороды с плагинами мы не будем, а повнимательнее присмотримся к найденному окну, то которое "Winamp 1.x". Оказывается, Winamp при воспроизведении устанавливает в его заголовок номер и название текущего трека. А именно это нам и надо! Функция GetWindowText решает все наши проблемы.
Code (Assembler) : Убрать нумерацию
- ...
- ; Получить текст из заголовка окна
- invoke GetWindowText,ebx,buff,300h
- or eax,eax
- ; Непонятная ошибка - текст пустой
- jz .no_winamp
- ...
Code (Assembler) : Убрать нумерацию
- ...
- ; Удалить из строки ' - Winamp'
- mov esi,buff
- cmp dword [esi+eax-9],' - W'
- jne @f
- mov byte [esi+eax-9],0
- ; Удалить из строки номер трека
- @@:
- lodsb
- cmp al,' '
- jne @b
- ; Скопировать название трека
- invoke lstrcpy,play_now,esi
- ; Теперь в буфере play_now содержится название трека
- ...
В приложении пример программы с исходным текстом, получающей в режиме реального времени название воспроизводимого трека из плеера Winamp и совместимых с ним, а также официальная документация Winamp Application Programming Interface.
Просмотров: 7961 | Комментариев: 9
Метки: Assembler, мультимедиа

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(05.05.2015 в 08:27):
В новой версии будет JA. Я сделал через нормальные API этого плеера.

Прол Смит
(05.05.2015 в 07:42):
название класса окна Jet-Audio - "COWON Jet-Audio MainWnd Class"
остальные действия такие-же
остальные действия такие-же

Dolsha
(09.02.2015 в 09:13):
Большое спасибо, я нашел решение поставленной задачи более грамотно, но просто интерес все равно остался и вот сижу и понимаю, что мои знания ассемблера очень скудны и на самом деле он не знает преград)

ManHunter
(09.02.2015 в 09:00):
Заменить вывод строки на запись ее в файл. По ключевым словам _lopen, _lwrite все примеры элементарно гуглятся. Исходник открытый, заменить не проблема.

Dolsha
(09.02.2015 в 06:02):
ManHunter, а как сделать так, чтобы информация сохранялась в файл .txt, а не выводилась в окне?
Заранее спасибо
З.Ы. уже замучился искать готовое решение для АИМПА.
Заранее спасибо
З.Ы. уже замучился искать готовое решение для АИМПА.

ManHunter
(21.11.2013 в 13:26):
Корпорация AOL закрыла проект Winamp. Американская IT-корпорация AOL приняла решение закрыть проект Winamp, который включал в себя медиаплеер и ряд музыкальных сервисов. Плеер станет недоступен с 20 декабря, тогда же прекратит работу и сайт winamp.com. Об этом говорится в объявлении, размещенном на сайте проекта.

AyTkACT
(01.12.2011 в 12:20):
ManHunter, вирмейкерство олдскульное - это и уму и сердцу, а вот теперешнее... (Далее следует непереводимая игра слов с использованием местных идиоматических выражений)

ManHunter
(01.12.2011 в 11:04):
Ну почему же ни уму ни сердцу? ЛЮБОЕ программирование - это в первую очередь практика, изучение нового. Я, например, учил Ассемблер на написании вирусов. Тоже, казалось бы, бесполезная вещь, но с другой стороны это работа с файловой системой, памятью, оптимизация кода, изучение различных форматов файлов, множество нестандартных решений и еще куча всего полезного.

AyTkACT
(01.12.2011 в 10:28):
Имхо, познавательно, но прикладного значения не имеет. Все эти информеры, рюшечки, соц. сети и прочая тратата на букву "х", не даёт ни уму ни сердцу.
Куда полезней было бы заиметь на asm'e HashCheck ( hxxp://code.kliu.org/hashcheck/ ), переработанный, оптимизированный, с добавлением/удалением актуальных алго хеширования, etc.
Хотя сабж и так достаточно быстрый, но оптимизация - она весчь такая, совершенства не имеющая))
Куда полезней было бы заиметь на asm'e HashCheck ( hxxp://code.kliu.org/hashcheck/ ), переработанный, оптимизированный, с добавлением/удалением актуальных алго хеширования, etc.
Хотя сабж и так достаточно быстрый, но оптимизация - она весчь такая, совершенства не имеющая))

Добавить комментарий
Заполните форму для добавления комментария
