123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- #ifndef _WAFE_H_
- #define _WAFE_H_
- /*
- ** Winamp frontend/plug-in control API documentation v1.1.
- ** By Justin Frankel. Updates by Christophe Thibault.
- ** Copyright (C) 1997-2000, Nullsoft Inc.
- ** Last updated: JUL.12.2000.
- **
- ** Introduction
- ** -----------------------
- ** This file describes a means to easily communicate to Winamp
- ** via the classic Win32 Message API.
- **
- ** These definitions/code assume C/C++. Porting to VB/Delphi shouldn't
- ** be too hard.
- **
- ** First, you find the HWND of the Winamp main window. From a plug-in
- ** you can easily extract this from the plug-in structure (hMainWindow,
- ** hwndParent, whatever). For external apps, use:
- **
- ** HWND hwnd_winamp = FindWindow("Winamp v1.x",NULL);
- **
- ** (note: I know, we're in Winamp 2.x, but it's 1.x for compatibility)
- **
- ** Once you have the hwnd_winamp, it's a good idea to check the version
- ** number. To do this, you send a WM_WA_IPC message to hwnd_winamp.
- ** Note that WM_WA_IPC is defined as Win32's WM_USER.
- **
- ** Note that sometimes you might want to use PostMessage instead of
- ** SendMessageW.
- */
- #define WM_WA_IPC WM_USER
- /**************************************************************************/
- #define IPC_GETVERSION 0
- /*
- ** int version = SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION);
- **
- ** Version will be 0x20yx for winamp 2.yx. versions previous to Winamp 2.0
- ** typically (but not always) use 0x1zyx for 1.zx versions. Weird, I know.
- **
- ** The basic format for sending messages to Winamp is:
- ** int result=SendMessageW(hwnd_winamp,WM_WA_IPC,command_data,command);
- ** (for the version check, command_data is 0).
- */
- #define IPC_DELETE 101
- /*
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_DELETE);
- **
- ** You can use IPC_DELETE to clear Winamp's internal playlist.
- */
- #define IPC_STARTPLAY 102
- /*
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_STARTPLAY);
- **
- ** Using IPC_STARTPLAY is like hitting 'Play' in Winamp, mostly.
- */
- #define IPC_ISPLAYING 104
- /*
- ** int res = SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING);
- **
- ** IPC_ISPLAYING returns the status of playback.
- ** If it returns 1, it is playing. if it returns 3, it is paused,
- ** if it returns 0, it is not playing.
- */
- #define IPC_GETOUTPUTTIME 105
- /*
- ** int res = SendMessageW(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME);
- **
- ** IPC_GETOUTPUTTIME returns the position in milliseconds of the
- ** current song (mode = 0), or the song length, in seconds (mode = 1).
- ** Returns -1 if not playing or error.
- */
- #define IPC_JUMPTOTIME 106
- /* (requires Winamp 1.60+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,ms,IPC_JUMPTOTIME);
- ** IPC_JUMPTOTIME sets the position in milliseconds of the
- ** current song (approximately).
- ** Returns -1 if not playing, 1 on eof, or 0 if successful
- */
- #define IPC_WRITEPLAYLIST 120
- /* (requires Winamp 1.666+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_WRITEPLAYLIST);
- **
- ** IPC_WRITEPLAYLIST writes the current playlist to <winampdir>\\Winamp.m3u,
- ** and returns the current playlist position.
- ** Kinda obsoleted by some of the 2.x new stuff, but still good for when
- ** using a front-end (instead of a plug-in)
- */
- #define IPC_SETPLAYLISTPOS 121
- /* (requires Winamp 2.0+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,position,IPC_SETPLAYLISTPOS)
- **
- ** IPC_SETPLAYLISTPOS sets the playlsit position to 'position'.
- */
- #define IPC_SETVOLUME 122
- /* (requires Winamp 2.0+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,volume,IPC_SETVOLUME);
- **
- ** IPC_SETVOLUME sets the volume of Winamp (from 0-255).
- */
- #define IPC_SETPANNING 123
- /* (requires Winamp 2.0+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,panning,IPC_SETPANNING);
- **
- ** IPC_SETPANNING sets the panning of Winamp (from 0 (left) to 255 (right)).
- */
- #define IPC_GETLISTLENGTH 124
- /* (requires Winamp 2.0+)
- ** int length = SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTLENGTH);
- **
- ** IPC_GETLISTLENGTH returns the length of the current playlist, in
- ** tracks.
- */
- #define IPC_SETSKIN 200
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)"skinname",IPC_SETSKIN);
- **
- ** IPC_SETSKIN sets the current skin to "skinname". Note that skinname
- ** can be the name of a skin, a skin .zip file, with or without path.
- ** If path isn't specified, the default search path is the winamp skins
- ** directory.
- */
- #define IPC_GETSKIN 201
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)skinname_buffer,IPC_GETSKIN);
- **
- ** IPC_GETSKIN puts the directory where skin bitmaps can be found
- ** into skinname_buffer.
- ** skinname_buffer must be MAX_PATH characters in length.
- ** When using a .zip'd skin file, it'll return a temporary directory
- ** where the ZIP was decompressed.
- */
- #define IPC_EXECPLUG 202
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)"vis_file.dll",IPC_EXECPLUG);
- **
- ** IPC_EXECPLUG executes a visualization plug-in pointed to by WPARAM.
- ** the format of this string can be:
- ** "vis_whatever.dll"
- ** "vis_whatever.dll,0" // (first mod, file in winamp plug-in dir)
- ** "C:\\dir\\vis_whatever.dll,1"
- */
- #define IPC_GETPLAYLISTFILE 211
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** char *name=SendMessageW(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE);
- **
- ** IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index].
- ** returns a pointer to it. returns NULL on error.
- */
- #define IPC_GETPLAYLISTTITLE 212
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** char *name=SendMessageW(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTTITLE);
- **
- ** IPC_GETPLAYLISTTITLE gets the title of the playlist entry [index].
- ** returns a pointer to it. returns NULL on error.
- */
- #define IPC_GETLISTPOS 125
- /* (requires Winamp 2.05+)
- ** int pos=SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS);
- **
- ** IPC_GETLISTPOS returns the playlist position. A lot like IPC_WRITEPLAYLIST
- ** only faster since it doesn't have to write out the list. Heh, silly me.
- */
- #define IPC_GETINFO 126
- /* (requires Winamp 2.05+)
- ** int inf=SendMessageW(hwnd_winamp,WM_WA_IPC,mode,IPC_GETINFO);
- **
- ** IPC_GETINFO returns info about the current playing song. The value
- ** it returns depends on the value of 'mode'.
- ** Mode Meaning
- ** ------------------
- ** 0 Samplerate (i.e. 44100)
- ** 1 Bitrate (i.e. 128)
- ** 2 Channels (i.e. 2)
- */
- #define IPC_GETEQDATA 127
- /* (requires Winamp 2.05+)
- ** int data=SendMessageW(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA);
- **
- ** IPC_GETEQDATA queries the status of the EQ.
- ** The value returned depends on what 'pos' is set to:
- ** Value Meaning
- ** ------------------
- ** 0-9 The 10 bands of EQ data. 0-63 (+20db - -20db)
- ** 10 The preamp value. 0-63 (+20db - -20db)
- ** 11 Enabled. zero if disabled, nonzero if enabled.
- ** 12 Autoload. zero if disabled, nonzero if enabled.
- */
- #define IPC_SETEQDATA 128
- /* (requires Winamp 2.05+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA);
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,value,IPC_SETEQDATA);
- **
- ** IPC_SETEQDATA sets the value of the last position retrieved
- ** by IPC_GETEQDATA.
- */
- #define IPC_ADDBOOKMARK 129
- /* (requires Winamp 2.4+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_ADDBOOKMARK);
- **
- ** IPC_ADDBOOKMARK will add the specified file to the Winamp bookmark list.
- */
- #define IPC_RESTARTWINAMP 135
- /* (requires Winamp 2.2+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_RESTARTWINAMP);
- **
- ** IPC_RESTARTWINAMP will restart Winamp (isn't that obvious ? :)
- */
- #define IPC_MBOPEN 241
- /* (requires Winamp 2.05+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_MBOPEN);
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPEN);
- **
- ** IPC_MBOPEN will open a new URL in the minibrowser. if url is NULL, it will open the Minibrowser window.
- */
- #define IPC_INETAVAILABLE 242
- /* (requires Winamp 2.05+)
- ** val=SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_INETAVAILABLE);
- **
- ** IPC_INETAVAILABLE will return 1 if the Internet connection is available for Winamp.
- */
- #define IPC_UPDTITLE 243
- /* (requires Winamp 2.2+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_UPDTITLE);
- **
- ** IPC_UPDTITLE will ask Winamp to update the informations about the current title.
- */
- #define IPC_CHANGECURRENTFILE 245
- /* (requires Winamp 2.05+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_CHANGECURRENTFILE);
- **
- ** IPC_CHANGECURRENTFILE will set the current playlist item.
- */
- #define IPC_GETMBURL 246
- /* (requires Winamp 2.2+)
- ** char buffer[4096]; // Urls can be VERY long
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)buffer,IPC_GETMBURL);
- **
- ** IPC_GETMBURL will retrieve the current Minibrowser URL into buffer.
- */
- #define IPC_REFRESHPLCACHE 247
- /* (requires Winamp 2.2+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_REFRESHPLCACHE);
- **
- ** IPC_REFRESHPLCACHE will flush the playlist cache buffer.
- */
- #define IPC_MBBLOCK 248
- /* (requires Winamp 2.4+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,value,IPC_MBBLOCK);
- **
- ** IPC_MBBLOCK will block the Minibrowser from updates if value is set to 1
- */
- #define IPC_MBOPENREAL 249
- /* (requires Winamp 2.4+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPENREAL);
- **
- ** IPC_MBOPENREAL works the same as IPC_MBOPEN except that it will works even if
- ** IPC_MBBLOCK has been set to 1
- */
- #define IPC_GET_SHUFFLE 250
- /* (requires Winamp 2.4+)
- ** val=SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_GET_SHUFFLE);
- **
- ** IPC_GET_SHUFFLE returns the status of the Shuffle option (1 if set)
- */
- #define IPC_GET_REPEAT 251
- /* (requires Winamp 2.4+)
- ** val=SendMessageW(hwnd_winamp,WM_WA_IPC,0,IPC_GET_REPEAT);
- **
- ** IPC_GET_REPEAT returns the status of the Repeat option (1 if set)
- */
- #define IPC_SET_SHUFFLE 252
- /* (requires Winamp 2.4+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,value,IPC_SET_SHUFFLE);
- **
- ** IPC_SET_SHUFFLE sets the status of the Shuffle option (1 to turn it on)
- */
- #define IPC_SET_REPEAT 253
- /* (requires Winamp 2.4+)
- ** SendMessageW(hwnd_winamp,WM_WA_IPC,value,IPC_SET_REPEAT);
- **
- ** IPC_SET_REPEAT sets the status of the Repeat option (1 to turn it on)
- */
- /**************************************************************************/
- /*
- ** Some API calls tend to require that you send data via WM_COPYDATA
- ** instead of WM_USER. Such as IPC_PLAYFILE:
- */
- #define IPC_PLAYFILE 100
- /*
- ** COPYDATASTRUCT cds;
- ** cds.dwData = IPC_PLAYFILE;
- ** cds.lpData = (void *) "file.mp3";
- ** cds.cbData = strlen((char *) cds.lpData)+1; // include space for null char
- ** SendMessageW(hwnd_winamp,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);
- **
- ** This will play the file "file.mp3".
- **
- */
- #define IPC_CHDIR 103
- /*
- ** COPYDATASTRUCT cds;
- ** cds.dwData = IPC_CHDIR;
- ** cds.lpData = (void *) "c:\\download";
- ** cds.cbData = strlen((char *) cds.lpData)+1; // include space for null char
- ** SendMessageW(hwnd_winamp,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);
- **
- ** This will make Winamp change to the directory C:\\download
- **
- */
- /**************************************************************************/
- /*
- ** Finally there are some WM_COMMAND messages that you can use to send
- ** Winamp misc commands.
- **
- ** To send these, use:
- **
- ** SendMessageW(hwnd_winamp, WM_COMMAND,command_name,0);
- */
- #define WINAMP_OPTIONS_EQ 40036 // toggles the EQ window
- #define WINAMP_OPTIONS_PLEDIT 40040 // toggles the playlist window
- #define WINAMP_VOLUMEUP 40058 // turns the volume up a little
- #define WINAMP_VOLUMEDOWN 40059 // turns the volume down a little
- #define WINAMP_FFWD5S 40060 // fast forwards 5 seconds
- #define WINAMP_REW5S 40061 // rewinds 5 seconds
- // the following are the five main control buttons, with optionally shift
- // or control pressed
- // (for the exact functions of each, just try it out)
- #define WINAMP_BUTTON1 40044
- #define WINAMP_BUTTON2 40045
- #define WINAMP_BUTTON3 40046
- #define WINAMP_BUTTON4 40047
- #define WINAMP_BUTTON5 40048
- #define WINAMP_BUTTON1_SHIFT 40144
- #define WINAMP_BUTTON2_SHIFT 40145
- #define WINAMP_BUTTON3_SHIFT 40146
- #define WINAMP_BUTTON4_SHIFT 40147
- #define WINAMP_BUTTON5_SHIFT 40148
- #define WINAMP_BUTTON1_CTRL 40154
- #define WINAMP_BUTTON2_CTRL 40155
- #define WINAMP_BUTTON3_CTRL 40156
- #define WINAMP_BUTTON4_CTRL 40157
- #define WINAMP_BUTTON5_CTRL 40158
- #define WINAMP_FILE_PLAY 40029 // pops up the load file(s) box
- #define WINAMP_FILE_DIR 40187 // pops up the load directory box
- #define WINAMP_OPTIONS_PREFS 40012 // pops up the preferences
- #define WINAMP_OPTIONS_AOT 40019 // toggles always on top
- #define WINAMP_HELP_ABOUT 40041 // pops up the about box :)
- #define ID_MAIN_PLAY_AUDIOCD1 40323 // starts playing the audio CD in the first CD reader
- #define ID_MAIN_PLAY_AUDIOCD2 40323 // plays the 2nd
- #define ID_MAIN_PLAY_AUDIOCD3 40323 // plays the 3nd
- #define ID_MAIN_PLAY_AUDIOCD4 40323 // plays the 4nd
- // IDs 42000 to 45000 are reserved for gen_ff
- // IDs from 45000 to 57000 are reserved for library
- /*
- ** EOF.. Enjoy.
- */
- #endif
|