CWinamp - 不仅仅是 Winamp2 API 包装器






4.86/5 (15投票s)
2003 年 3 月 14 日
4分钟阅读

157172

2154
带有额外功能的 Winamp2 API 包装器
引言
程序员都是懒惰的,我们都知道。 每当我们遇到一些 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 测试。
许可证
本文没有附加明确的许可,但可能在文章文本或下载文件中包含使用条款。如有疑问,请通过下面的讨论区与作者联系。可以在这里找到作者可能使用的许可证列表。