Мое приложение извлекает текущую воспроизводимую песню из множества музыкальных проигрывателей. Однако у меня большие проблемы с реализацией Zune и Windows Media Player.
Я много гуглил на эту тему, к сожалению, это только больше и больше меня сбивает с толку.
Что я обычно делаю для других приложений:
- Перебирать все открытые окна каждые 4 секунды
- Получить заголовок всех окон
- Проверьте заголовок на наличие шаблона (т.е.
" - Spotify "
) - Если он есть, отрегулируйте заголовок для вывода.
WMP В названии нет текущей воспроизводимой песни.
Zune это делает, но он каждые несколько секунд переключается между названием, альбомом и исполнителем. Что крайне ненадежно отслеживать с помощью моего текущего метода, хотя и возможно.
Проигрыватель Windows Media
Я также пытался использовать компонент COM для проигрывателя Windows Media.
import win32com.client
wmp = win32com.client.gencache.EnsureDispatch('WMPlayer.OCX')
# some function I don't have here, it retrieves the current playing song
# and other data
Большая проблема в том, что вам нужно запускать WMP программно, что было бы крайне неудобным для пользователя.
Итак, что я нашел? Это сообщение SO перенаправляет на WMP.dll. Но насколько я читал, у него та же проблема, что и у СОМ, его надо запускать программно. Если нет, мне бы очень хотелось узнать, как работать с этой dll в python.
Было бы другое, немного менее хакерское решение, заключающееся в том, чтобы написать плагин для WMP, позволить моим пользователям загрузить этот плагин и получить данные из этого плагина. Я бы не стал туда заходить, так как у меня нет опыта ни с одним из языков C, и мне не хочется копаться в документации по плагинам для этого.
Zune
Метод заключается в циклическом просмотре трех состояний заголовка, определении того, в каком состоянии он находится в данный момент, и поиске положения двух других.
IE: Первые 5 секунд название: Super_song Следующие 5 секунд название: By Power_artist Следующие 5 секунд название: Good_album (дата)
Таким образом, я мог определить, когда название альбома, создав регулярное выражение для даты (которое всегда есть), а затем найти название и исполнителя, подождав несколько секунд.
Это, очевидно, не лучшее решение, так как это займет некоторое время и не очень надежно (например, что, если название песни содержит дату)
Следующая проблема заключается в том, что это также непоследовательно, иногда название просто остается Zune в течение нескольких минут. Не знаю, почему.
Итак, переходим к следующему способу.
Это приложение называется ZuneNowPlaying. Это «каким-то образом» получает текущую воспроизводимую песню из Zune и помещает ее в реестр, эта штука не работает с моим неаккуратным методом названия, поскольку он меняет реестр в момент изменения песни. Немедленно.
Это решение я использовал в рабочей версии своей программы, но многие пользователи сообщали, что оно просто не работало, ничего не происходило. И я проверил программу, и она не всегда надежно меняет реестр. Я не знаю почему, я не знаю, как это исправить. Таким образом, это решение также отбрасывается.
Является ли тот факт, что он использует имя «MsnMsgrUIManager»#000000»>, заставляет программное обеспечение zune отправлять ему информацию о том, какая песня играет? Есть ли способ получить эту информацию без такого взлома?
Это найдено в обсуждении приложения Zune Now Playing. К сожалению, источник недоступен, по крайней мере, я не могу его найти. У кого-нибудь есть больше об этом?
Третий метод, о котором я слышал, снова был dll. ZuneShell.dll это называется. Я не помню, где читал об этом, и не могу найти через google, так как все результаты "Является ли ZuneShell.dll вирусом?".
И снова я столкнулся с проблемой, что не знаю, как с этим работать, даже ЕСЛИ у меня есть документация по нему, черт возьми, даже если это то, что я искал.
Альтернативные направления для изучения
Просматривая эту тему, я видел, как люди говорили о получении данных непосредственно из графического интерфейса. Я не уверен, насколько законно, возможно или даже насколько правильно я помню об этом, но если это возможно, может ли кто-нибудь перенаправить меня на более подробную информацию об этом?
Что-нибудь еще, правда.