如何让 windows 媒体播放器转到播放列表中的上一首歌曲?

Posted

技术标签:

【中文标题】如何让 windows 媒体播放器转到播放列表中的上一首歌曲?【英文标题】:How to make windows media player go to previous song in playlist? 【发布时间】:2010-05-18 10:00:12 【问题描述】:

我正在用 C++ 编写一个简单的 Windows 应用程序,它将能够向 Windows 媒体播放器发送命令。我的问题是我希望我的应用移到播放列表中的上一首歌曲。

IWMPControls::previous() 似乎可以完成这项工作,但它的行为与 msdn 中所写的不同。实际上,此功能会将当前媒体倒回到开头,然后(如果当前位置小于 2-3 秒)切换到上一首歌曲。

我想实现两个不同的按钮(请不要问我为什么 :)) - 一个用于倒退到开头,一个 - 用于移动到上一首歌曲。有没有简单的方法通过 IWMPControls(或任何其他 WMP 相关的 COM 接口)来做到这一点?

附言如果我能得到当前歌曲在列表中的位置(索引),我可以处理这个问题。但就我阅读 MSDN 而言,在我看来没有简单的方法可以从播放列表中获取当前项目索引...

【问题讨论】:

【参考方案1】:

我认为,从外部控制 WMP 应用程序的最简单方法是发送消息。所以,你坚持使用基本的 WinAPI,你必须得到你的 WMP 窗口句柄。

在您检索到它的句柄后,可以很容易地使用纯 Windows 消息将某些命令传输给它。

基本上,您只需调用SendMessage 来检索早先的HWND wmp_windows_handle。控制消息通常是 WM_COMMAND 消息,其中 wParam 指定您希望播放器执行的操作。

例如,如果您将0x00004979 指定为wParam,则可以传输Stop 命令。

坚持使用 Google 或 Windows Media Player SDK 获取有关这些命令代码的更多具体信息,您一定会找到所需的内容。

另外提一下,我不精通你上面描述的那个 IWMPStuff,所以如果我是你并且我想要一个具体的答案,我可能会参考它的 SDK。 p>

【讨论】:

IWMPCore 可以在没有任何窗口的情况下创建,因此没有要接收的句柄。无论如何,如果我以某种方式发送“上一个”命令,它会先倒带然后转到上一首歌曲,所以这不是解决方案。 您说需要确定当前歌曲在列表中的索引。这也可以使用SendMessage 技术来完成。不确定 WMP,但是(例如,在 Winamp 中),这很简单,并在 SDK 中进行了描述。【参考方案2】:

好吧,我想我想通了。您可以通过 1) 先调用 IWMPControls::put_currentPosition(0.0), 2) 再调用 IWMPControls::previous() 来强制播放上一首歌曲。

可能存在一些问题,因为似乎必须在 1) 和 2) 之间经过一段时间。显而易见的解决方案是在您的程序中使用 ::PostMessage()(不是 ::PostMessage 到 WMP),因此您执行第 1 步),然后是 PostMessage,并在处理您的消息时执行第 2 步)。

【讨论】:

以上是关于如何让 windows 媒体播放器转到播放列表中的上一首歌曲?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Brightcove 播放器保留在应用程序中而不跳转到 safari

如何让我的应用程序中的播放器播放 UNNotificationSound.default()?

ppt如何插入windows媒体播放器

Windows 媒体播放器播放列表

如何使我自己编写的音频播放器可以在后台运行(Windows Phone 8.1- WinRT)?

如何通过 hls.js 跳转到 hls 流中的具体 UTC 时间戳