Winamp Control Utility via hotkeys






2.41/5 (5 votes)
Jan 16, 2007

27021
A small snippet which allows you to control your winamp via predefined hotkeys
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./**************************************************************/ /* A small snippet which allows you to control winamp /* via hotkeys on your keyboard. /* /* If you wish to add more features you can go here: /* http://forums.winamp.com/showthread.php?s=&threadid=180297 /**************************************************************/ #include <iostream> #include <windows.h> using namespace std; // WM_COMMAND - Commands to send to Winamp Client. #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 // WM_USER #define WINAMP_CUSTOM_VOLUME 122 // HOTKEYS #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; }