65.9K
CodeProject 正在变化。 阅读更多。
Home

CWinamp - 不仅仅是 Winamp2 API 包装器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (15投票s)

2003 年 3 月 14 日

4分钟阅读

viewsIcon

157172

downloadIcon

2154

带有额外功能的 Winamp2 API 包装器

Sample Image - winamp2api.gif

引言

程序员都是懒惰的,我们都知道。 每当我们遇到一些 API 时,我们都想为它创建一个包装器,以便更容易使用它。 微软编写了它的“基础类”,每天都有人在 CodeProject.com 上发布关于他自己新的包装类的文章。 我也决定这样做。

我需要从另一个应用程序控制我的 Winamp2,在做了一些研究后,我终于找到了不错的 Winamp2 API 文档。 但是几分钟后,我就厌倦了输入所有带有数字参数的 SendMessage,地球上没有人会想要记住它。 在使用官方 Winamp2 API 之后,我不得不发现 API 没有提供一些方便的函数,例如获取当前音量。 那现在怎么办? 好吧,我开始编写包装器。 不久,我启动了 Spy++ 以访问一些方便但未记录的 API 调用,例如读取音量或生成 HTML 播放列表。 哇! 现在我觉得是时候与您分享我的工作了。 :-)

我的主要目标是尽可能保持包装器的简单,以便即使是初学者也可以毫无问题地使用它。 结果是一个单一的头文件,需要包含到您的工作区中。 就这样! 现在让我们开始,我将解释最重要的步骤和函数。

使用 winamp2 包装器类

使用此类非常容易。 只需将#include "winamp2.h"包含到您的工作区。 接下来,在您的项目中创建一个包装类变量

CWinamp amp // create the wrapper variable named "amp"

在使用所有函数之前,您需要FindWinamp()。 对于大多数人来说,在没有任何参数的情况下调用此函数是足够安全的。 可以使用不同的窗口类打开 Winamp,但是使用参数 /CLASS 启动的标准“Winamp v1.x”。 但是大多数人不会这样做,所以您不必担心 FindWindow() 参数。 如果找到 Winamp,该函数返回 true。 现在您可以使用所有漂亮的功能了。

有很多函数,我不想详细解释所有函数。 这些可能是最重要的

void    Previous();
void    Next();
void    Play();
void    Pause();
void    Stop();
const char* GetCurrentTitle()

我希望是不言自明的 :-) 所以如果你想转到下一首曲目,只需像这样调用 Next() 函数

CWinamp amp;
if(amp.FindWinamp())
{
    // Winamp has been found, play next track
    amp.Next();
}

这些函数都有解释其作用的名称,例如 TrackGetPositionMSec()。 这会返回曲目当前的毫秒位置。 有三个函数需要更详细地讨论,但实际上它们也很容易使用。 函数如下

int GetVolume();
void SetVolume(int volume);
int EQGetData(int band);
void EQSetData(int band, int value);
int EQGetPreampValaue();

GetVolume() 函数返回一个介于 0 和 255 之间的值。 0 表示音量完全关闭(即静音),而 255 表示全音量。 这样,您可以将 0 到 255 的值传递给 SetVolume()EQGetData(int band) 接受一个 0-9 的值作为参数,表示均衡器的十个频段之一。 它返回一个介于 0 和 63 之间的值。 0 表示 -20 dB 的值,63 表示 +20 dB 的值。 考虑到这一点,如果您想通过例如 CSliderCtrl 来表示该值,请确保像这样设置其范围:SetRange(0, 63)。 要设置特定频段的值,请调用 EQSetData()。 第一个参数是频段 (0-9),第二个参数是范围 0-63 中的值。

注意:由于某种原因,Winamp 不会在运行时刷新均衡器条,但会应用更改。 您需要 RestartWinamp() 才能使更改在均衡器中可见。 责怪 winamp 的程序员吧 ;-) EQGetPreampValaue() 也会返回 0-63 范围内的前置放大器值。

结论

我想说这是您需要了解的关于该类的一切。如果您有任何其他问题,请随时发表评论或给我发送邮件。 该类已成功通过 Winamp 2.81 测试。

许可证

本文没有附加明确的许可,但可能在文章文本或下载文件中包含使用条款。如有疑问,请通过下面的讨论区与作者联系。可以在这里找到作者可能使用的许可证列表。

© . All rights reserved.