Нужен способ получить текущую воспроизводимую песню из Zune и Windows Media Player с Python
Моя прикладная программа извлекает текущую воспроизводимую песню из множества музыкальных проигрывателей. Однако у меня большие проблемы с реализацией Zune и Windows Media Player.
Я много гуглил на эту тему, к сожалению, это только смущает меня все больше и больше.
Что я обычно делаю для других приложений:
Итерация по всем открытым окнам каждые 4 секундыПолучить заголовок всех оконПроверьте заголовок для шаблона (т.е." - Spotify "
)Если он есть, настройте заголовок для вывода.WMP Нет текущей воспроизводимой песни в заголовке.
Zune делает, но вращается каждые несколько секунд между названием, альбомом и исполнителем. Который крайне ненадежен для отслеживания с моим текущим методом, хотя это возможно.
Windows Media Player
Я также попытался использовать компонент COM для Windows Media Player.
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 программно, что было бы крайне недружественным для пользователя
Итак, что я нашел?Этот ТАК пост перенаправляет на WMP.dll. Но, насколько я прочитал, у него та же проблема, что и у COM, его нужно запускать программно. Если нет, мне бы очень хотелось узнать, как работать с этой DLL в Python.
Было бы другое, немного менее хакерское решение: написать плагин для WMP, позволить моим пользователям загружать этот плагин и получать данные из этого плагина. Я бы предпочел не идти туда, так как у меня нет опыта работы с какими-либо языками Си, и мне не хочется копаться в документации по плагинам для этого.
Zune
Метод будет состоять в том, чтобы циклически проходить через три состояния заголовка, определять, в каком состоянии он находится в данный момент, и находить положение двух других.
IE: первые 5 секунд заголовок: Super_song следующие 5 секунд заголовок: By Power_artist следующие 5 секунд заголовок: Good_album (date)
Таким образом, я мог определить, когда заголовок альбома, сделав регулярное выражение для даты (которая всегда есть), а затем найти название и исполнителя, подождав несколько секунд.
Это, очевидно, не очень хорошее решение, так как это займет некоторое время и не очень надежно (например, если название песни содержит дату)
Следующая проблема заключается в том, что она также непоследовательна, иногда название остается Zune в течение нескольких минут. Понятия не имею почему.
Итак, перейдите к следующему методу.
Там это приложение называетсяZuneNowPlaying, Это «каким-то образом» получает текущую воспроизводимую песню от Zune и помещает ее в реестр, эта вещь не работает с моим неаккуратным методом заголовка, поскольку она изменяет реестр в момент изменения песни. Немедленно.
Это решение, которое я использовал в рабочей версии моей программы, но многие пользователи сообщали, что она просто не работала, ничего не произошло. И я проверил программу, и она не всегда надежно меняет реестр. Я не знаю почему, я не знаю, как это исправить. Таким образом, это решение также утилизируется.
Является ли тот факт, что он использует имя "MsnMsgrUIManager" # 000000 ">, приводит к тому, что программное обеспечение zune отправляет ему информацию о том, какая песня воспроизводится? Есть ли способ получить эту информацию без такого взлома?
Это можно найти в обсуждении приложения Zune Now Playing. К сожалению, источник недоступен, по крайней мере, я не могу его найти. Кто-нибудь получил больше по этому поводу?
Третий метод, о котором я слышал, был снова, dll. ZuneShell.dll это называется. Я не помню, где я читал об этом, и при этом я не могу найти это через Google, так как все результаты - "Является ли ZuneShell.dll вирусом?".
Еще раз, я сталкиваюсь с проблемой, что я не знаю, как работать с этим дажеЕСЛИ У меня была документация на это, черт возьми, если это даже то, что я искал.
Альтернативные направления, чтобы, возможно, посмотреть в
Просматривая эту тему, я видел людей, которые говорили о получении данных непосредственно из GUI. Я не уверен, насколько правдиво, возможно или даже насколько правильно моя память об этом, но если это возможно, мог бы кто-нибудь перенаправить меня на это?
Всё остальное, правда.