Precisa de uma maneira de recuperar a música atual do Zune e do Windows Media Player com Python

Um aplicativo meu recupera a música atual tocando de uma infinidade de players de música. No entanto, estou tendo problemas para implementar o Zune e o Windows Media Player.

Eu pesquisei muito sobre o assunto, infelizmente isso só me confunde mais e mais.

O que eu normalmente faria para minhas outras aplicações:

Iterar em todas as janelas abertas a cada 4 segundosObter o título de todas as janelasVerifique o título de um padrão (ou seja," - Spotify ")Se estiver lá, ajuste o título da saída.

WMP Não tem a música atual no título.

Zune faz, mas está girando a cada poucos segundos entre título, álbum e artista. O que não é confiável para acompanhar meu método atual, embora seja possível.

Windows Media Player

Eu também tentei usar o componente COM para o 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

O grande problema com isso requer que você inicie o WMP programaticamente, o que seria extremamente hostil ao usuário

Então, o que eu achei?Esta postagem do SO redireciona para WMP.dll. Mas, tanto quanto eu li, tem o mesmo problema que o COM, você tem que iniciá-lo por meio de programação. Se não, eu realmente gostaria de algumas instruções sobre como trabalhar com essa dll em python.

Haveria outra solução um pouco menos hacky, que é escrever um plugin para o WMP, deixar meus usuários baixarem esse plugin e recuperar os dados daquele plugin. Eu prefiro não ir lá, já que não tenho experiência com nenhuma das linguagens C, nem sinto vontade de cavar em documentações de plugins para isso.

Zune

Um método seria percorrer os três estados de título, determinar em que estado está e encontrar a posição dos outros dois.

IE: Primeiros 5 segundos o título é: Super_song Próximo 5 segundos o título é: Por Power_artist Próximos 5 segundos o título é: Good_album (date)

Assim, eu poderia determinar quando o título do álbum está fazendo um regex para a data (que está sempre lá) e, em seguida, encontrar o título e o artista aguardando alguns segundos.

Isso obviamente não é uma ótima solução, já que vai demorar um pouco e também não é muito confiável (e se o nome da música contiver uma data por exemplo)

O próximo problema é que ele também não é consistente. Às vezes, o título apenas mantém o Zune por alguns minutos. Não faço ideia do porquê.

Então, passe para o próximo método.

Existe esta aplicação chamadaZuneNowPlaying. Esse "de alguma forma" pega a música atual do Zune e a coloca no registro, essa coisa não funciona com o meu método de título desleixado, já que muda o registro no instante em que a música muda. Imediatamente.

Esta é a solução que usei na versão de trabalho do meu programa, mas muitos usuários relataram que simplesmente não funcionou, nada aconteceu. E eu verifiquei o programa e ele não muda o registro de maneira confiável o tempo todo. Eu não sei porque, eu não sei como consertar isso. Por esse motivo, esta solução também é recoberta.

É o fato de que ele está usando o nome "MsnMsgrUIManager" # 000000 "> causando o software zune para enviar informações sobre qual música está tocando? Existe uma maneira de obter essas informações sem esse tipo de hack?

Isso é encontrado na discussão do aplicativo Zune Now Playing. A fonte não está disponível, infelizmente, pelo menos não consigo encontrá-lo. Alguém tem mais sobre isso?

O terceiro método que eu tinha ouvido falar foi mais uma vez, um dll. ZuneShell.dll é chamado. Eu não lembro onde eu li sobre isso, nem posso encontrá-lo via google, uma vez que todos os resultados são "É ZuneShell.dll um vírus?".

Mais uma vez, me deparo com o problema que eu não sei como trabalhar com isso mesmoE SE Eu tenho documentação sobre isso, se é mesmo o que eu estava procurando.

Direções alternativas para talvez investigar

Enquanto navegava sobre esse assunto, vi pessoas falando sobre como recuperar dados diretamente da GUI. Eu não tenho certeza de quão legítimo, possível ou até mesmo correto a minha memória é, mas se é possível alguém poderia me redirecionar para mais sobre isso?

Qualquer outra coisa, realmente.

questionAnswers(2)

yourAnswerToTheQuestion