如何在C#中与Windows Media Player进行交互

时间:2020-03-05 18:51:25  来源:igfitidea点击:

我正在寻找一种与Windows Media Player独立完整版进行交互的方法。
通常,我需要知道当前播放曲目的路径。

iTunes SDK使这一操作变得非常容易,但是不幸的是,使用Windows Media Player确实没有任何方法,至少在没有大量使用pinvoke的情况下,至少在.Net(C#)中无法做到这一点,我对此并不满意。

谢谢

需要澄清的是:我不想在我的应用程序中嵌入Windows Media Player的新实例,而是控制/读取由用户单独启动的Windows Media Player的"真实"完整版本。

解决方案

回答

我的https://social.msdn.microsoft.com/Forums/vstudio/en-US/dbd43d7e-f3a6-4087-be06-df17e76b635d/windows-media-player-remoting-in-c?forum=clr书签,但无论如何都没有对其进行测试。只是指向正确方向的指针。它不是官方的,需要进行一些挖掘,但是我们应该在Windows Media Player周围获得一个相当简单的包装器(该包装器仍将使用PInvoke,但我们不会看到它)。

希望能有所帮助。

哦,我误会了。我以为我们在谈论控制当前正在运行的Windows Media Player实例。如果我们自己托管Windows Media Player,那么WMPLib当然是更好的解决方案。

回答

只需添加对wmp.dll的引用(\ windows \ system32 \ wmp.dll)

using WMPLib;

然后我们可以实例化媒体播放器

var Player = new WindowsMediaPlayer();
// Load a playlist or file and then get the title 
var title = Player.controls.currentItem.name;

有关更多信息,请参见以编程方式创建Windows Media Player控件。

回答

我看到的与Windows Media Player交互的最佳信息是Stephen Toub撰写的这篇文章。

他列出了播放dvr-ms文件的各种不同方式的全部负载(尽管它们实际上是什么格式并不重要)。我们可能会感兴趣的一点是使用Media Player ActiveX控件,我们可以通过右键单击并添加Windows Media Player ActiveX COM控件将其添加到visual Studio工具箱中。然后,我们可以将播放器嵌入到应用中,并访问Media Player的各种属性,例如url:

WMPplayer.URL = stringPathToFile;

此解决方案可能不是我们想要的,因为它正在启动Media Player的新实例(据我所知),但是它可能会为我们指明正确的方向。

回答

要远程处理Windows Media Player,可以使用IWMPRemoteMediaServices接口来控制独立的Windows Media Player。而且我们应该能够从WMP播放器对象中读取所需的所有信息,例如标题或者文件名。不幸的是,SDK中没有Csmaple代码。我们可以从此处获取文件:http://d.hatena.ne.jp/punidama/20080227查找文件WmpRemote.zip
最初是从这里:http://blogs.msdn.com/ericgu/archive/2005/06/22/431783.aspx

然后,我们必须强制转换为WindowsMediaPlayer对象:
RemotedWindowsMediaPlayer rm =新的RemotedWindowsMediaPlayer();
WMPLib.WindowsMediaPlayer myPlayer = this.GetOcx()as WMPLib.WindowsMediaPlayer;

然后你去..