程序化控制 Winamp2/3/Sonique






4.55/5 (8投票s)
2003 年 3 月 12 日
1分钟阅读

71794

788
一篇关于从外部程序控制流行的媒体播放器的文章。
引言
本文展示了一种从外部程序程序化控制 Winamp 1.x-2.x、Winamp3 和 Sonique 1.x 的方法。
背景
前段时间,我为一款很酷的小工具 Codename: Dashboard 做了测试。基本上,它是一个类似侧边栏的程序,作为子组件的容器。
无论如何,它有一个很棒的 Windows Media Player 组件,但没有 Winamp 的组件。在与 MP3 和 WMP 6.4 体验不佳之后,我基本上拒绝将其用作我的媒体播放器。(我知道……我听说 WMP9 更好。时间会证明一切。)这促使我为 Winamp 编写一个组件…
只有一个问题:我找不到任何关于远程控制 Winamp3 的文档。 似乎 Nullsoft 团队在 Wasabi 中遗漏了这个功能。因此,在一番挖掘之后,我得出了以下结论。
使用代码
首先,我们必须弄清楚我们正在运行哪个播放器
HWND FindPlayer(int wanted) { HWND hwnd; if (wanted == 0 || wanted == 4) { hwnd = FindWindow("Sonique Window Class", NULL); if (hwnd != 0) { playerID = 4; return hwnd; } } if (wanted == 0 || wanted == 3) { hwnd = FindWindow("Studio", NULL); if (hwnd != 0) { playerID = 3; return hwnd; } } if (wanted == 0 || wanted == 2) { hwnd = FindWindow("Winamp v1.x", NULL); if (hwnd != 0) { playerID = 2; return hwnd; } } playerID = 0; return 0; }
接下来,我们确定要发送哪个命令
// Winamp 2 defines #define W2_PREV 40044 #define W2_PLAY 40045 #define W2_PAUSE 40046 #define W2_STOP 40047 #define W2_NEXT 40048 #define W2_FILEPLAY 40029 #define W2_ISPLAYING 104 #define W2_OUTPUTTIME 105 #define W2_JUMPTOTIME 106 #define W2_SETPLAYLISTPOS 121 #define W2_GETLISTLENGTH 124 #define W2_GETLISTPOS 125 #define W2_GETINFO 126 // Winamp 3 defines #define W3_PREV 'z' #define W3_PLAY 'x' #define W3_PAUSE 'c' #define W3_STOP 'v' #define W3_NEXT 'b' #define W3_FILEPLAY 'l' // Sonique 1 defines #define S1_PREV 'z' #define S1_PLAY 'x' #define S1_PAUSE 'c' #define S1_STOP 'v' #define S1_NEXT 'b' #define S1_FILEPLAY 'l'
然后我们将命令发送到正确的窗口
void SendW3Key(HWND hwnd_winamp,char message) { short key = VkKeyScan(message); UINT scancode = MapVirtualKey(key, 0); PostMessage(hwnd_winamp, WM_KEYDOWN, key, scancode); PostMessage(hwnd_winamp, WM_CHAR, key, scancode); PostMessage(hwnd_winamp, WM_KEYUP, key, scancode); }
所以,将所有内容整合起来,看起来像这样
private void AmpControl_Play(void) { HWND hwnd_winamp = FindPlayer(0); if (hwnd_winamp != 0) { if (playerID == 2) { SendMessage(hwnd_winamp, WM_COMMAND, W2_PLAY, 0); } else if (playerID == 3) { SendW3Key(hwnd_winamp, W3_PLAY); } else if (playerID == 4) { SendW3Key(hwnd_winamp, S1_PLAY); } } }
源代码包括播放、暂停、下一首、上一首、打开和停止。全部打包在一个易于使用的 DLL 项目中。
历史
v1.0.0.0 - 2003年3月11日 - 初始发布