一个带 C# 的 Winamp 前端库






3.30/5 (12投票s)
一个关于作为 Winamp 前端运行的 C# 库的文章。

引言
这是一个相当基础的 C# 类,用于通过经典的 Win32 Message API 控制 Winamp
。我想你可以说它是一个 Winamp
的前端,能够支持从 .NET 应用程序中实现的最常见命令。
我一直想在我的 C# 应用程序中集成一些基本的 Winamp
功能,并且需要建立 .NET 环境与 Winamp
之间的通信。我开始在网上搜索任何可用的库或代码示例,但没有太多运气或完整的示例。我很快注意到 Winamp SDK 已从其官方 网站 提供给 C 开发者。这时我意识到,为了使我的 C# 应用程序保持简单,最好的选择是将 SDK 的主要部分翻译成 C# 版本。
说了这么多,如果你仍然想通过你的 C# 应用程序“掌握” Winamp
,那么请继续阅读。
背景
首先,我想说这并非完全是我自己的作品,也就是说,我并没有从头开始编写这段代码。它只是官方 Winamp SDK 的 C 版本的一个 C# 翻译。更具体地说,为了编写这段代码,我使用了以下参考资料:
- 一个相当有用的 Geekpedia 教程,涵盖了从 .NET 环境设置与
Winamp
通信的所有基础知识。 - The Winamp 5 SDK
- 一些常量也取自
- Winamp SDK 中的“wa_ipc.h”头文件
- 此头文件
- 方法“
GetCurrentSongTitle()
”和“IsNumeric()
”改编自 此 CodeProject 文章。
为了给你一个概念,一个很好的实际例子是集成类似前端的侧边栏(例如 Google Desktop 的侧边栏,或 DesktopSidebar)。这些是固定在桌面任何边缘的垂直/水平栏,其中包含许多可自定义的有用功能;新闻源、你的照片、天气信息,当然还有基本的 Winamp
/Windows Media Player 控制功能。
Winamp 命令类型基础介绍
此前端类仅包含 static
方法。这使得直接调用类的任何方法变得更加容易,而无需事先构造任何对象。
代码大量使用了 Win32
Message API,因此相关的 DLL 被导入并在类的方法中使用。在与 Winamp 通信方面,我注意到有两种基本类别的命令类型用于向 Winamp 发送和/或接收信息;
WM_COMMAND
WM_USER
(可能也称为WM_WA_IPC
)
第一类命令用于 Winamp 的主要操作,涉及其主要功能;例如 Play()
、Stop()
、Pause()
等。它们用于将特定命令发送到 Winamp
,并且不将任何内容返回给调用程序。第二类命令用于能够将一些基本信息返回给程序的辅助操作;例如 GetPlaybackStatus()
等。在 C# 中,这两类命令必须由特定的十六进制代码表示,如下所示:
// To tell Winamp that we are sending it a WM_COMMAND it needs the hex code 0x111
const int WM_COMMAND = 0x111;
// To tell Winamp that we are sending it a WM_USER (WM_WA_IPC)
// it needs the hex code 0x0400
const int WM_WA_IPC = 0x0400;
Using the Code
首先要做的是找到 WinampFrontEndLib.dll 库文件,并将其添加到你的应用程序的引用部分。我知道你很可能已经执行过这个过程无数次了,但我还是忍不住要提一下如何做:
- 右键单击你的 C# 项目(在解决方案资源管理器窗口中),然后单击“添加引用...”菜单项。
- 在“添加引用”对话框中,单击“浏览”按钮(确保你位于 .NET 选项卡上)。
- 导航到你下载的源文件存储的文件夹,从 WinampFrontEndLib\bin\Release 文件夹中找到 WinampFrontEndLib.dll 库文件,然后双击它。
- 如果你一切顺利,现在你应该会看到下面的对话框。如果是,则单击“确定”。
现在只需在你的 using
部分添加相关的命名空间,你就可以开始了。
// Do not forget to include the necessary namespace
using WinampFrontEndLib;
由于 Winamp
类中的所有内容都声明为 static
,因此使用其方法非常直接。下面的示例演示了演示应用程序中播放按钮的点击事件。
private string DisplaySong()
{
return WinampLib.GetCurrentSongTitle();
}
private void button1_Click(object sender, System.EventArgs e)
{
WinampLib.Play();
this.lblTitle.Caption = this.DisplaySong();
}
演示中音量增加/减按钮的点击事件也是如此。
private void button6_Click(object sender, System.EventArgs e)
{
WinampLib.VolumeUp();
}
private void button3_Click(object sender, System.EventArgs e)
{
WinampLib.VolumeDown();
}
我想你现在应该 pretty much 已经明白了从你的应用程序调用这些方法有多么容易了。相同的逻辑也适用于类中其余可用的方法。
使用演示
zip 文件中还包含一个可执行的演示。这是一个小项目,演示了如何使用一些最常见的 Winamp 命令,以及调用库的各种方法的便捷性。要使用它,只有一个先决条件;只需启动 Winamp
。然后你就可以开始使用演示应用程序了。(我真的很喜欢在单击 C# 演示上的音量增加/减按钮时,看着 Winamp
中的音量条自己移动。)
Winamp 前端的当前局限性(以及未来的可能发展)
- 该库仅在你的应用程序和
Winamp
之间建立基本通信,通过向正在运行的实例发送命令。我的意思是,如果你真的想让这个东西正常工作,Winamp
必须已安装并正在运行。所以,如果你在没有运行Winamp
的情况下执行库的任何方法时什么都没发生,请不要感到惊讶。 - 当前版本不包含任何在
Winamp
未运行时启动它的方法。如果你想这样做,可以通过添加几行代码轻松实现。所以请随时修改代码以满足你的需求。 - 当前版本也无法隐藏
Winamp
的运行实例,或任何其他操作。我想如果你能做到这一点,你的用户可能会认为他们正在通过你的应用程序 100% 控制Winamp
。
历史
- 2005 年 12 月 8 日 - 版本 1.0