Blog. Just Blog
Как получить название текущего трека из 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.
Просмотров: 2148 | Комментариев: 3
Комментарии
Отзывы посетителей сайта о статье
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.
Хотя сабж и так достаточно быстрый, но оптимизация - она весчь такая, совершенства не имеющая))
Добавить комментарий
Заполните форму для добавления комментария
Get Winamp Track Demo