Получение текущего экземпляра Windows Media Player

Привет, ребята, я пытаюсь интегрировать текущее имя медиа / исполнителя в мое приложение на Python, и я не могу заставить его работать.

Я сделал то же самое с iTunes, почти без проблем, но по некоторым причинам я не могу получить правильный экземпляр Windows Media Player

wmp = win32com.client.gencache.EnsureDispatch("WMPlayer.OCX")

получает действительный экземпляр wmp, но когда я пытаюсь получить текущий носитель, используя

wmp.currentMedia

Он ничего не возвращает и получает такой объем:

wmp.settings.volume

возвращает громкость, отличную от моей фактически открытой громкости проигрывателя Windows Media.

Есть ли что-то, о чем я не знаю? Я также пытался использовать WMPlayer.OCX.7, но это не работает, если кто-то может мне помочь, это будет более чем оценено!

2 ответа

Проигрыватель Windows Media поддерживает несколько запускаемых экземпляров. Создание OCX так, как вы делаете, создает отдельный экземпляр проигрывателя, который, разумеется, не имеет загруженных носителей.

Обычный способ найти "главный" экземпляр - посмотреть в таблице запущенных объектов, но Windows Media Player не делает этого. Вместо этого вам нужно использовать "удаленный" режим.

Это не очень хорошо документировано, но здесь есть пример VB.Net, переведенный из примера C# здесь. Есть примеры C++ в Windows SDK, в \Multimedia\WMP_11\cpp\RemoteSkin каталог.

К сожалению, этого нет в Python. Но, надеюсь, существующие образцы помогут вам.

Может быть, попробовать и использовать что-то вроде GetObject(None, "WMPlayer.OCX")) поставленный EnsureDispatch? я думаю что EnsureDispatch обычно создает отдельный экземпляр.exe. С помощью GetObject должен "зафиксировать" текущий экземпляр и сделать его доступным как объект.

Другие вопросы по тегам