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

一个带 C# 的 Winamp 前端库

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.30/5 (12投票s)

2005年12月8日

CPOL

5分钟阅读

viewsIcon

91954

downloadIcon

2377

一个关于作为 Winamp 前端运行的 C# 库的文章。

Demo screenshot - demoScreenshot.png

引言

这是一个相当基础的 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
  • 一些常量也取自
    1. Winamp SDK 中的“wa_ipc.h”头文件
    2. 头文件
  • 方法“GetCurrentSongTitle()”和“IsNumeric()”改编自 CodeProject 文章。

为了给你一个概念,一个很好的实际例子是集成类似前端的侧边栏(例如 Google Desktop 的侧边栏,或 DesktopSidebar)。这些是固定在桌面任何边缘的垂直/水平栏,其中包含许多可自定义的有用功能;新闻源、你的照片、天气信息,当然还有基本的 Winamp/Windows Media Player 控制功能。

Winamp 命令类型基础介绍

此前端类仅包含 static 方法。这使得直接调用类的任何方法变得更加容易,而无需事先构造任何对象。

代码大量使用了 Win32 Message API,因此相关的 DLL 被导入并在类的方法中使用。在与 Winamp 通信方面,我注意到有两种基本类别的命令类型用于向 Winamp 发送和/或接收信息;

  1. WM_COMMAND
  2. 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 库文件,并将其添加到你的应用程序的引用部分。我知道你很可能已经执行过这个过程无数次了,但我还是忍不住要提一下如何做:

  1. 右键单击你的 C# 项目(在解决方案资源管理器窗口中),然后单击“添加引用...”菜单项。
  2. 在“添加引用”对话框中,单击“浏览”按钮(确保你位于 .NET 选项卡上)。
  3. 导航到你下载的源文件存储的文件夹,从 WinampFrontEndLib\bin\Release 文件夹中找到 WinampFrontEndLib.dll 库文件,然后双击它。
  4. 如果你一切顺利,现在你应该会看到下面的对话框。如果是,则单击“确定”。

Add Reference screenshot- AddReference.jpg

现在只需在你的 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 前端的当前局限性(以及未来的可能发展)

  1. 该库仅在你的应用程序和 Winamp 之间建立基本通信,通过向正在运行的实例发送命令。我的意思是,如果你真的想让这个东西正常工作,Winamp 必须已安装并正在运行。所以,如果你在没有运行 Winamp 的情况下执行库的任何方法时什么都没发生,请不要感到惊讶。
  2. 当前版本不包含任何在 Winamp 未运行时启动它的方法。如果你想这样做,可以通过添加几行代码轻松实现。所以请随时修改代码以满足你的需求。
  3. 当前版本也无法隐藏 Winamp 的运行实例,或任何其他操作。我想如果你能做到这一点,你的用户可能会认为他们正在通过你的应用程序 100% 控制 Winamp

历史

  • 2005 年 12 月 8 日 - 版本 1.0
© . All rights reserved.