如何使Windows媒体播放器转到播放列表中的上一首歌?

时间:2010-05-18 10:00:13

标签: c++ com windows-media-player

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我认为,从外部控制WMP应用程序的最简单方法是发送消息。因此,您坚持使用基本的WinAPI,并且必须处理WMP窗口。

在检索到它的句柄后,可以使用普通的Windows消息轻松地将某些命令传输给它。

基本上,您只需调用SendMessage来检索之前的HWND wmp_windows_handle。控制消息通常是WM_COMMAND消息,其中wParam指定您希望玩家做什么。

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

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

还要提一下,我不熟悉你上面描述的IWMPStuff,所以如果我是你,我想要一个具体的答案,我可能会参考它的SDK。

答案 1 :(得分:0)

好吧,我想我弄明白了。您可以强制前一首歌1)首先调用IWMPControls :: put_currentPosition(0.0),2)然后调用IWMPControls :: previous()。

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