我正在用c ++编写一个简单的Windows应用程序,它将能够向Windows媒体播放器发送命令。我的问题是我希望我的应用程序移动到播放列表中的上一首歌。
IWMPControls :: previous()似乎可以完成这项工作,但它的行为与msdn中的行为不同。事实上,此功能将当前媒体倒回到开头,然后(如果当前位置小于2-3秒),它会切换到上一首歌曲。
我想实现两个不同的按钮(请不要问我为什么:)) - 一个用于倒带到开头,一个用于移动到上一首歌。有没有简单的方法通过IWMPControls(或任何其他与WMP相关的COM接口)来做到这一点?
P.S。如果我能够获得列表中当前歌曲的位置(索引),我可以处理这个问题。但就我读MSDN而言,在我看来,没有简单的方法可以从播放列表中获取当前项目索引......
答案 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)。