This small snippet will enable you to control Winamp.
Hotkeys
Predefined hotkeys. Usage:
CTRL + ALT + F12 - Play or pause current song.
CTRL + ALT + F11 - Stop playing current song.
CTRL + ALT + F10 - Resume playing curret song.
CTRL + ALT + F9 - Close Winamp player.
CTRL + ALT + F8 - Skip to next item in playlist.
CTRL + ALT + F7 - Toggle repeat in Winamp.
CTRL + ALT + F6 - Toggle shuffle in Winamp.
CTRL + ALT + ARROW UP - Increase volume in Winamp.
CTRL + ALT + ARROW DOWN - Decrease volume in Winamp.
CTRL + ALT + ARROW RIGHT - Fast forward 5 seconds.
CTRL + ALT + ARROW DOWN - Fast rewind 5 seconds.
Source
Below you fill everything you need to build the controller.
I used Dev-C++ 4.9.9.2 to compile this source.
#include <iostream>
#include <windows.h>
using namespace std;
#define WINAMP_START 40045
#define WINAMP_PLAY_OR_PAUSE 40046
#define WINAMP_NEXT_TRACK 40048
#define WINAMP_PREVIOUS_TRACK 40044
#define WINAMP_CLOSE 40001
#define WINAMP_STOP 40047
#define WINAMP_RAISE_VOLUME 40058
#define WINAMP_LOWER_VOLUME 40059
#define WINAMP_TOGGLE_REPEAT 40022
#define WINAMP_TOGGLE_SHUFFLE 40023
#define WINAMP_WINDOW_HANDLE "Winamp v1.x"
#define WINAMP_FAST_FORWARD 40148
#define WINAMP_FAST_REWIND 40144
#define WINAMP_CUSTOM_VOLUME 122
#define CALL_CMD_PLAY_OR_PAUSE 101 // CTRL + ALT + F12
#define CALL_CMD_STOP 102 // CTRL + ALT + F11
#define CALL_CMD_START 105 // CTRL + ALT + F10
#define CALL_CMD_CLOSE 106 // CTRL + ALT + F9
#define CALL_CMD_NEXT_TRACK 107 // CTRL + ALT + F8
#define CALL_CMD_REPEAT 108 // CTRL + ALT + F7
#define CALL_CMD_SHUFFLE 109 // CTRL + ALT + F6
#define CALL_CMD_RAISE_VOLUME 103 // CTRL + ALT + ARROW UP
#define CALL_CMD_LOWER_VOLUME 104 // CTRL + ALT + ARROW DOWN
#define CALL_CMD_FAST_FORWARD 110 // CTRL + ALT + ARROW RIGHT
#define CALL_CMD_FAST_REWIND 111 // CTRL + ALT + ARROW LEFT
class Controller
{
public:
void PlayOrPause();
void Next();
void Previous();
void Start();
void Stop();
void Close();
void RaiseVolume();
void LowerVolume();
void ToggleRepeat();
void ToggleShuffle();
void CustomVolume(int Volume);
void FastForward();
void FastRewind();
char * CurrentTrack();
void WCommand(int command);
void UCommand(int input, int command);
HWND WinampHandle();
private:
char itsCurrentTrack[2048],*p;
};
HWND Controller::WinampHandle()
{
return FindWindow(WINAMP_WINDOW_HANDLE,NULL);
}
void Controller::WCommand(int command)
{
SendMessage(Controller::WinampHandle(),WM_COMMAND, command, 1);
}
void Controller::UCommand(int input, int command)
{
SendMessage(Controller::WinampHandle(),WM_USER, input, command);
}
void Controller::PlayOrPause() { Controller::WCommand(WINAMP_PLAY_OR_PAUSE); }
void Controller::Next() { Controller::WCommand(WINAMP_NEXT_TRACK); }
void Controller::Previous() { Controller::WCommand(WINAMP_PREVIOUS_TRACK); }
void Controller::Close() { Controller::WCommand(WINAMP_CLOSE); }
void Controller::Stop() { Controller::WCommand(WINAMP_STOP); }
void Controller::ToggleRepeat() { Controller::WCommand(WINAMP_TOGGLE_REPEAT); }
void Controller::ToggleShuffle() { Controller::WCommand(WINAMP_TOGGLE_SHUFFLE); }
void Controller::RaiseVolume() { Controller::WCommand(WINAMP_RAISE_VOLUME); }
void Controller::LowerVolume() { Controller::WCommand(WINAMP_LOWER_VOLUME); }
void Controller::Start() { Controller::WCommand(WINAMP_START); }
void Controller::CustomVolume(int Volume){ Controller::UCommand(Volume,WINAMP_CUSTOM_VOLUME); }
void Controller::FastForward() { Controller::WCommand(WINAMP_FAST_FORWARD); }
void Controller::FastRewind() { Controller::WCommand(WINAMP_FAST_REWIND); }
char * Controller::CurrentTrack()
{
GetWindowText(Controller::WinampHandle(),itsCurrentTrack,sizeof(itsCurrentTrack));
p = itsCurrentTrack+strlen(itsCurrentTrack)-8;
while (p >= itsCurrentTrack)
{
if (!strnicmp(p,"- Winamp",8))
{
break;
p--;
}
}
if (p >= itsCurrentTrack)
{
p--;
}
while (p >= itsCurrentTrack && *p == ' ')
{
p--;
*++p = 0;
}
return itsCurrentTrack;
}
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "Winamp Controller";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;
hwnd = CreateWindowEx (
0,
szClassName,
"Winamp Controller Utility",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
544,
375,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
RegisterHotKey(hwnd, CALL_CMD_PLAY_OR_PAUSE, MOD_CONTROL|MOD_ALT, VK_F12);
RegisterHotKey(hwnd, CALL_CMD_STOP, MOD_CONTROL|MOD_ALT, VK_F11);
RegisterHotKey(hwnd, CALL_CMD_START, MOD_CONTROL|MOD_ALT, VK_F10);
RegisterHotKey(hwnd, CALL_CMD_CLOSE, MOD_CONTROL|MOD_ALT, VK_F9);
RegisterHotKey(hwnd, CALL_CMD_NEXT_TRACK, MOD_CONTROL|MOD_ALT, VK_F8);
RegisterHotKey(hwnd, CALL_CMD_REPEAT, MOD_CONTROL|MOD_ALT, VK_F7);
RegisterHotKey(hwnd, CALL_CMD_SHUFFLE, MOD_CONTROL|MOD_ALT, VK_F6);
RegisterHotKey(hwnd, CALL_CMD_RAISE_VOLUME, MOD_CONTROL|MOD_ALT, VK_UP);
RegisterHotKey(hwnd, CALL_CMD_LOWER_VOLUME, MOD_CONTROL|MOD_ALT, VK_DOWN);
RegisterHotKey(hwnd, CALL_CMD_FAST_FORWARD, MOD_CONTROL|MOD_ALT, VK_RIGHT);
RegisterHotKey(hwnd, CALL_CMD_FAST_REWIND, MOD_CONTROL|MOD_ALT, VK_LEFT);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
Controller Winamp;
switch (message)
{
case WM_HOTKEY:
switch(wParam)
{
case CALL_CMD_PLAY_OR_PAUSE:
Winamp.PlayOrPause();
break;
case CALL_CMD_STOP:
Winamp.Stop();
break;
case CALL_CMD_START:
Winamp.Start();
break;
case CALL_CMD_CLOSE:
Winamp.Close();
break;
case CALL_CMD_NEXT_TRACK:
Winamp.Next();
break;
case CALL_CMD_REPEAT:
Winamp.ToggleRepeat();
break;
case CALL_CMD_SHUFFLE:
Winamp.ToggleShuffle();
break;
case CALL_CMD_RAISE_VOLUME:
Winamp.RaiseVolume();
break;
case CALL_CMD_LOWER_VOLUME:
Winamp.LowerVolume();
break;
case CALL_CMD_FAST_FORWARD:
Winamp.FastForward();
break;
case CALL_CMD_FAST_REWIND:
Winamp.FastRewind();
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.