0

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

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

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

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

4

2 回答 2

0

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

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

基本上,您只需调用SendMessage之前检索到的HWND wmp_windows_handle。控制消息通常是一条WM_COMMAND消息,其中 awParam指定您希望播放器执行的操作。

例如,Stop如果您指定0x00004979为您的wParam.

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

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

于 2010-05-18T10:16:33.593 回答
0

嗯,我想我想通了。您可以通过 1) 首先调用 IWMPControls::put_currentPosition(0.0),2) 然后调用 IWMPControls::previous() 来强制上一首歌曲。

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

于 2010-05-20T07:38:56.587 回答