Получение текущего экземпляра 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
должен "зафиксировать" текущий экземпляр и сделать его доступным как объект.