12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127 |
- /*
- LICENSE
- -------
- Copyright 2005 Nullsoft, Inc.
- All rights reserved.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of Nullsoft nor the names of its contributors may be used to
- endorse or promote products derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef _WA_IPC_H_
- #define _WA_IPC_H_
- /*
- ** This is the modern replacement for the classic 'frontend.h'. Most of these
- ** updates are designed for in-process use, i.e. from a plugin.
- **
- */
- /* message used to sent many messages to winamp's main window.
- ** most all of the IPC_* messages involve sending the message in the form of:
- ** result = SendMessage(hwnd_winamp,WM_WA_IPC,(parameter),IPC_*);
- */
- #define WM_WA_IPC WM_USER
- /* but some of them use WM_COPYDATA. be afraid.
- */
- #define IPC_GETVERSION 0
- /* int version = SendMessage(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.
- */
- #define IPC_GETREGISTEREDVERSION 770
- typedef struct {
- char *filename;
- char *title;
- int length;
- } enqueueFileWithMetaStruct; // send this to a IPC_PLAYFILE in a non WM_COPYDATA,
- // and you get the nice desired result. if title is NULL, it is treated as a "thing",
- // otherwise it's assumed to be a file (for speed)
- #define IPC_PLAYFILE 100 // dont be fooled, this is really the same as enqueufile
- #define IPC_ENQUEUEFILE 100
- /* sent as a WM_COPYDATA, with IPC_PLAYFILE as the dwData, and the string to play
- ** as the lpData. Just enqueues, does not clear the playlist or change the playback
- ** state.
- */
- #define IPC_DELETE 101
- #define IPC_DELETE_INT 1101 // don't use this, it's used internally by winamp when
- // dealing with some lame explorer issues.
- /* SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_DELETE);
- ** Use IPC_DELETE to clear Winamp's internal playlist.
- */
- #define IPC_STARTPLAY 102 // starts playback. almost like hitting play in Winamp.
- #define IPC_STARTPLAY_INT 1102 // used internally, don't bother using it (won't be any fun)
- #define IPC_CHDIR 103
- /* sent as a WM_COPYDATA, with IPC_CHDIR as the dwData, and the directory to change to
- ** as the lpData.
- */
- #define IPC_ISPLAYING 104
- /* int res = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING);
- ** 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 = SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME);
- ** returns the position in milliseconds of the current track (mode = 0),
- ** or the track length, in seconds (mode = 1). Returns -1 if not playing or error.
- */
- #define IPC_JUMPTOTIME 106
- /* (requires Winamp 1.60+)
- ** SendMessage(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_GETMODULENAME 109
- #define IPC_EX_ISRIGHTEXE 666
- /* usually shouldnt bother using these, but here goes:
- ** send a WM_COPYDATA with IPC_GETMODULENAME, and an internal
- ** flag gets set, which if you send a normal WM_WA_IPC message with
- ** IPC_EX_ISRIGHTEXE, it returns whether or not that filename
- ** matches. lame, I know.
- */
- #define IPC_WRITEPLAYLIST 120
- /* (requires Winamp 1.666+)
- ** SendMessage(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+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,position,IPC_SETPLAYLISTPOS)
- ** IPC_SETPLAYLISTPOS sets the playlist position to 'position'. It
- ** does not change playback or anything, it just sets position, and
- ** updates the view if necessary
- */
- #define IPC_SETVOLUME 122
- /* (requires Winamp 2.0+)
- ** SendMessage(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+)
- ** SendMessage(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 = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTLENGTH);
- ** IPC_GETLISTLENGTH returns the length of the current playlist, in
- ** tracks.
- */
- #define IPC_GETLISTPOS 125
- /* (requires Winamp 2.05+)
- ** int pos=SendMessage(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=SendMessage(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)
- ** 3 (5+) Video LOWORD=w HIWORD=h
- ** 4 (5+) > 65536, string (video description)
- */
- #define IPC_GETEQDATA 127
- /* (requires Winamp 2.05+)
- ** int data=SendMessage(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+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA);
- ** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SETEQDATA);
- ** IPC_SETEQDATA sets the value of the last position retrieved
- ** by IPC_GETEQDATA. This is pretty lame, and we should provide
- ** an extended version that lets you do a MAKELPARAM(pos,value).
- ** someday...
- new (2.92+):
- if the high byte is set to 0xDB, then the third byte specifies
- which band, and the bottom word specifies the value.
- */
- #define IPC_ADDBOOKMARK 129
- /* (requires Winamp 2.4+)
- ** Sent as a WM_COPYDATA, using IPC_ADDBOOKMARK, adds the specified
- ** file/url to the Winamp bookmark list.
- */
- /*
- In winamp 5+, we use this as a normal WM_WA_IPC and the string:
- "filename\0title\0"
- to notify the library/bookmark editor that a bookmark
- was added. Note that using this message in this context does not
- actually add the bookmark.
- do not use :)
- */
- #define IPC_INSTALLPLUGIN 130
- /* not implemented, but if it was you could do a WM_COPYDATA with
- ** a path to a .wpz, and it would install it.
- */
- #define IPC_RESTARTWINAMP 135
- /* (requires Winamp 2.2+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_RESTARTWINAMP);
- ** IPC_RESTARTWINAMP will restart Winamp (isn't that obvious ? :)
- */
- #define IPC_ISFULLSTOP 400
- /* (requires winamp 2.7+ I think)
- ** ret=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISFULLSTOP);
- ** useful for when you're an output plugin, and you want to see
- ** if the stop/close is a full stop, or just between tracks.
- ** returns nonzero if it's full, zero if it's just a new track.
- */
- #define IPC_INETAVAILABLE 242
- /* (requires Winamp 2.05+)
- ** val=SendMessage(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+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_UPDTITLE);
- ** IPC_UPDTITLE will ask Winamp to update the informations about the current title.
- */
- #define IPC_REFRESHPLCACHE 247
- /* (requires Winamp 2.2+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_REFRESHPLCACHE);
- ** IPC_REFRESHPLCACHE will flush the playlist cache buffer.
- ** (send this if you want it to go refetch titles for tracks)
- */
- #define IPC_GET_SHUFFLE 250
- /* (requires Winamp 2.4+)
- ** val=SendMessage(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=SendMessage(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+)
- ** SendMessage(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+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_REPEAT);
- **
- ** IPC_SET_REPEAT sets the status of the Repeat option (1 to turn it on)
- */
- #define IPC_ENABLEDISABLE_ALL_WINDOWS 259 // 0xdeadbeef to disable
- /* (requires Winamp 2.9+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,enable?0:0xdeadbeef,IPC_MBOPENREAL);
- ** sending with 0xdeadbeef as the param disables all winamp windows,
- ** any other values will enable all winamp windows.
- */
- #define IPC_GETWND 260
- /* (requires Winamp 2.9+)
- ** HWND h=SendMessage(hwnd_winamp,WM_WA_IPC,IPC_GETWND_xxx,IPC_GETWND);
- ** returns the HWND of the window specified.
- */
- #define IPC_GETWND_EQ 0 // use one of these for the param
- #define IPC_GETWND_PE 1
- #define IPC_GETWND_MB 2
- #define IPC_GETWND_VIDEO 3
- #define IPC_ISWNDVISIBLE 261 // same param as IPC_GETWND
- /************************************************************************
- ***************** in-process only (WE LOVE PLUGINS)
- ************************************************************************/
- #define IPC_SETSKIN 200
- /* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
- ** SendMessage(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))
- ** SendMessage(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))
- ** SendMessage(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=SendMessage(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=SendMessage(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_GETHTTPGETTER 240
- /* retrieves a function pointer to a HTTP retrieval function.
- ** if this is unsupported, returns 1 or 0.
- ** the function should be:
- ** int (*httpRetrieveFile)(HWND hwnd, char *url, char *file, char *dlgtitle);
- ** if you call this function, with a parent window, a URL, an output file, and a dialog title,
- ** it will return 0 on successful download, 1 on error.
- */
- #define IPC_MBOPEN 241
- /* (requires Winamp 2.05+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_MBOPEN);
- ** SendMessage(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_CHANGECURRENTFILE 245
- /* (requires Winamp 2.05+)
- ** SendMessage(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
- ** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)buffer,IPC_GETMBURL);
- ** IPC_GETMBURL will retrieve the current Minibrowser URL into buffer.
- ** buffer must be at least 4096 bytes long.
- */
- #define IPC_MBBLOCK 248
- /* (requires Winamp 2.4+)
- ** SendMessage(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+)
- ** SendMessage(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_ADJUST_OPTIONSMENUPOS 280
- /* (requires Winamp 2.9+)
- ** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_OPTIONSMENUPOS);
- ** moves where winamp expects the Options menu in the main menu. Useful if you wish to insert a
- ** menu item above the options/skins/vis menus.
- */
- #define IPC_GET_HMENU 281
- /* (requires Winamp 2.9+)
- ** HMENU hMenu=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)0,IPC_GET_HMENU);
- ** values for data:
- ** 0 : main popup menu
- ** 1 : main menubar file menu
- ** 2 : main menubar options menu
- ** 3 : main menubar windows menu
- ** 4 : main menubar help menu
- ** other values will return NULL.
- */
- #define IPC_GET_EXTENDED_FILE_INFO 290 //pass a pointer to the following struct in wParam
- #define IPC_GET_EXTENDED_FILE_INFO_HOOKABLE 296
- /* (requires Winamp 2.9+)
- ** to use, create an extendedFileInfoStruct, point the values filename and metadata to the
- ** filename and metadata field you wish to query, and ret to a buffer, with retlen to the
- ** length of that buffer, and then SendMessage(hwnd_winamp,WM_WA_IPC,&struct,IPC_GET_EXTENDED_FILE_INFO);
- ** the results should be in the buffer pointed to by ret.
- ** returns 1 if the decoder supports a getExtendedFileInfo method
- */
- typedef struct {
- char *filename;
- char *metadata;
- char *ret;
- int retlen;
- } extendedFileInfoStruct;
- #define IPC_GET_BASIC_FILE_INFO 291 //pass a pointer to the following struct in wParam
- typedef struct {
- char *filename;
- int quickCheck; // set to 0 to always get, 1 for quick, 2 for default (if 2, quickCheck will be set to 0 if quick wasnot used)
- // filled in by winamp
- int length;
- char *title;
- int titlelen;
- } basicFileInfoStruct;
- #define IPC_GET_EXTLIST 292 //returns doublenull delimited. GlobalFree() it when done. if data is 0, returns raw extlist, if 1, returns something suitable for getopenfilename
- #define IPC_INFOBOX 293
- typedef struct {
- HWND parent;
- char *filename;
- } infoBoxParam;
- #define IPC_SET_EXTENDED_FILE_INFO 294 //pass a pointer to the a extendedFileInfoStruct in wParam
- /* (requires Winamp 2.9+)
- ** to use, create an extendedFileInfoStruct, point the values filename and metadata to the
- ** filename and metadata field you wish to write in ret. (retlen is not used). and then
- ** SendMessage(hwnd_winamp,WM_WA_IPC,&struct,IPC_SET_EXTENDED_FILE_INFO);
- ** returns 1 if the metadata is supported
- ** Call IPC_WRITE_EXTENDED_FILE_INFO once you're done setting all the metadata you want to update
- */
- #define IPC_WRITE_EXTENDED_FILE_INFO 295
- /* (requires Winamp 2.9+)
- ** writes all the metadata set thru IPC_SET_EXTENDED_FILE_INFO to the file
- ** returns 1 if the file has been successfully updated, 0 if error
- */
- #define IPC_FORMAT_TITLE 297
- typedef struct
- {
- char *spec; // NULL=default winamp spec
- void *p;
- char *out;
- int out_len;
- char * (*TAGFUNC)(char * tag, void * p); //return 0 if not found
- void (*TAGFREEFUNC)(char * tag,void * p);
- } waFormatTitle;
- #define IPC_GETUNCOMPRESSINTERFACE 331
- /* returns a function pointer to uncompress().
- ** int (*uncompress)(unsigned char *dest, unsigned long *destLen, const unsigned char *source, unsigned long sourceLen);
- ** right out of zlib, useful for decompressing zlibbed data.
- ** if you pass the parm of 0x10100000, it will return a wa_inflate_struct * to an inflate API.
- */
- typedef struct {
- int (*inflateReset)(void *strm);
- int (*inflateInit_)(void *strm,const char *version, int stream_size);
- int (*inflate)(void *strm, int flush);
- int (*inflateEnd)(void *strm);
- unsigned long (*crc32)(unsigned long crc, const unsigned char *buf, unsigned int len);
- } wa_inflate_struct;
- #define IPC_ADD_PREFS_DLG 332
- #define IPC_REMOVE_PREFS_DLG 333
- /* (requires Winamp 2.9+)
- ** to use, allocate a prefsDlgRec structure (either on the heap or some global
- ** data, but NOT on the stack), initialze the members:
- ** hInst to the DLL instance where the resource is located
- ** dlgID to the ID of the dialog,
- ** proc to the window procedure for the dialog
- ** name to the name of the prefs page in the prefs.
- ** where to 0 (eventually we may add more options)
- ** then, SendMessage(hwnd_winamp,WM_WA_IPC,&prefsRec,IPC_ADD_PREFS_DLG);
- **
- ** you can also IPC_REMOVE_PREFS_DLG with the address of the same prefsRec,
- ** but you shouldn't really ever have to.
- **
- */
- #define IPC_OPENPREFSTOPAGE 380 // pass an id of a builtin page, or a &prefsDlgRec of prefs page to open
- typedef struct _prefsDlgRec {
- HINSTANCE hInst;
- int dlgID;
- void *proc;
- char *name;
- int where; // 0 for options, 1 for plugins, 2 for skins, 3 for bookmarks, 4 for prefs
- int _id;
- struct _prefsDlgRec *next;
- } prefsDlgRec;
- #define IPC_GETINIFILE 334 // returns a pointer to winamp.ini
- #define IPC_GETINIDIRECTORY 335 // returns a pointer to the directory to put config files in (if you dont want to use winamp.ini)
- #define IPC_SPAWNBUTTONPOPUP 361 // param =
- // 0 = eject
- // 1 = previous
- // 2 = next
- // 3 = pause
- // 4 = play
- // 5 = stop
- #define IPC_OPENURLBOX 360 // pass a HWND to a parent, returns a HGLOBAL that needs to be freed with GlobalFree(), if successful
- #define IPC_OPENFILEBOX 362 // pass a HWND to a parent
- #define IPC_OPENDIRBOX 363 // pass a HWND to a parent
- // pass an HWND to a parent. call this if you take over the whole UI so that the dialogs are not appearing on the
- // bottom right of the screen since the main winamp window is at 3000x3000, call again with NULL to reset
- #define IPC_SETDIALOGBOXPARENT 364
- // pass 0 for a copy of the skin HBITMAP
- // pass 1 for name of font to use for playlist editor likeness
- // pass 2 for font charset
- // pass 3 for font size
- #define IPC_GET_GENSKINBITMAP 503
- #define IPC_GET_EMBEDIF 505 // pass an embedWindowState
- // returns an HWND embedWindow(embedWindowState *); if the data is NULL, otherwise returns the HWND directly
- typedef struct
- {
- HWND me; //hwnd of the window
- int flags;
- RECT r;
- void *user_ptr; // for application use
- int extra_data[64]; // for internal winamp use
- } embedWindowState;
- #define EMBED_FLAGS_NORESIZE 1 // set this bit in embedWindowState.flags to keep window from being resizable
- #define EMBED_FLAGS_NOTRANSPARENCY 2 // set this bit in embedWindowState.flags to make gen_ff turn transparency off for this wnd
- #define IPC_EMBED_ENUM 532
- typedef struct embedEnumStruct
- {
- int (*enumProc)(embedWindowState *ws, struct embedEnumStruct *param); // return 1 to abort
- int user_data; // or more :)
- } embedEnumStruct;
- // pass
- #define IPC_EMBED_ISVALID 533
- #define IPC_CONVERTFILE 506
- /* (requires Winamp 2.92+)
- ** Converts a given file to a different format (PCM, MP3, etc...)
- ** To use, pass a pointer to a waFileConvertStruct struct
- ** This struct can be either on the heap or some global
- ** data, but NOT on the stack. At least, until the conversion is done.
- **
- ** eg: SendMessage(hwnd_winamp,WM_WA_IPC,&myConvertStruct,IPC_CONVERTFILE);
- **
- ** Return value:
- ** 0: Can't start the conversion. Look at myConvertStruct->error for details.
- ** 1: Conversion started. Status messages will be sent to the specified callbackhwnd.
- ** Be sure to call IPC_CONVERTFILE_END when your callback window receives the
- ** IPC_CB_CONVERT_DONE message.
- */
- typedef struct
- {
- char *sourcefile; // "c:\\source.mp3"
- char *destfile; // "c:\\dest.pcm"
- int destformat[8]; // like 'PCM ',srate,nch,bps
- HWND callbackhwnd; // window that will receive the IPC_CB_CONVERT notification messages
-
- //filled in by winamp.exe
- char *error; //if IPC_CONVERTFILE returns 0, the reason will be here
- int bytes_done; //you can look at both of these values for speed statistics
- int bytes_total;
- int bytes_out;
- int killswitch; // don't set it manually, use IPC_CONVERTFILE_END
- int extra_data[64]; // for internal winamp use
- } convertFileStruct;
- #define IPC_CONVERTFILE_END 507
- /* (requires Winamp 2.92+)
- ** Stop/ends a convert process started from IPC_CONVERTFILE
- ** You need to call this when you receive the IPC_CB_CONVERTDONE message or when you
- ** want to abort a conversion process
- **
- ** eg: SendMessage(hwnd_winamp,WM_WA_IPC,&myConvertStruct,IPC_CONVERTFILE_END);
- **
- ** No return value
- */
- typedef struct {
- HWND hwndParent;
- int format;
- //filled in by winamp.exe
- HWND hwndConfig;
- int extra_data[8];
- } convertConfigStruct;
- #define IPC_CONVERT_CONFIG 508
- #define IPC_CONVERT_CONFIG_END 509
- typedef struct
- {
- void (*enumProc)(int user_data, const char *desc, int fourcc);
- int user_data;
- } converterEnumFmtStruct;
- #define IPC_CONVERT_CONFIG_ENUMFMTS 510
- /* (requires Winamp 2.92+)
- */
- typedef struct
- {
- char cdletter;
- char *playlist_file;
- HWND callback_hwnd;
- //filled in by winamp.exe
- char *error;
- } burnCDStruct;
- #define IPC_BURN_CD 511
- /* (requires Winamp 5.0+)
- */
- typedef struct
- {
- convertFileStruct *cfs;
- int priority;
- } convertSetPriority;
- #define IPC_CONVERT_SET_PRIORITY 512
- typedef struct
- {
- char *filename;
- char *title; // 2048 bytes
- int length;
- int force_useformatting; // can set this to 1 if you want to force a url to use title formatting shit
- } waHookTitleStruct;
- // return TRUE if you hook this
- #define IPC_HOOK_TITLES 850
- #define IPC_GETSADATAFUNC 800
- // 0: returns a char *export_sa_get() that returns 150 bytes of data
- // 1: returns a export_sa_setreq(int want);
- #define IPC_ISMAINWNDVISIBLE 900
- #define IPC_SETPLEDITCOLORS 920
- typedef struct
- {
- int numElems;
- int *elems;
- HBITMAP bm; // set if you want to override
- } waSetPlColorsStruct;
- // the following IPC use waSpawnMenuParms as parameter
- #define IPC_SPAWNEQPRESETMENU 933
- #define IPC_SPAWNFILEMENU 934 //menubar
- #define IPC_SPAWNOPTIONSMENU 935 //menubar
- #define IPC_SPAWNWINDOWSMENU 936 //menubar
- #define IPC_SPAWNHELPMENU 937 //menubar
- #define IPC_SPAWNPLAYMENU 938 //menubar
- #define IPC_SPAWNPEFILEMENU 939 //menubar
- #define IPC_SPAWNPEPLAYLISTMENU 940 //menubar
- #define IPC_SPAWNPESORTMENU 941 //menubar
- #define IPC_SPAWNPEHELPMENU 942 //menubar
- #define IPC_SPAWNMLFILEMENU 943 //menubar
- #define IPC_SPAWNMLVIEWMENU 944 //menubar
- #define IPC_SPAWNMLHELPMENU 945 //menubar
- #define IPC_SPAWNPELISTOFPLAYLISTS 946
- typedef struct
- {
- HWND wnd;
- int xpos; // in screen coordinates
- int ypos;
- } waSpawnMenuParms;
- // waSpawnMenuParms2 is used by the menubar submenus
- typedef struct
- {
- HWND wnd;
- int xpos; // in screen coordinates
- int ypos;
- int width;
- int height;
- } waSpawnMenuParms2;
- // system tray sends this (you might want to simulate it)
- #define WM_WA_SYSTRAY WM_USER+1
- // input plugins send this when they are done playing back
- #define WM_WA_MPEG_EOF WM_USER+2
- //// video stuff
- #define IPC_IS_PLAYING_VIDEO 501 // returns >1 if playing, 0 if not, 1 if old version (so who knows):)
- #define IPC_GET_IVIDEOOUTPUT 500 // see below for IVideoOutput interface
- #define VIDEO_MAKETYPE(A,B,C,D) ((A) | ((B)<<8) | ((C)<<16) | ((D)<<24))
- #define VIDUSER_SET_INFOSTRING 0x1000
- #define VIDUSER_GET_VIDEOHWND 0x1001
- #define VIDUSER_SET_VFLIP 0x1002
- #define VIDUSER_SET_TRACKSELINTERFACE 0x1003 // give your ITrackSelector interface as param2
- #ifndef NO_IVIDEO_DECLARE
- #ifdef __cplusplus
- class VideoOutput;
- class SubsItem;
- typedef struct {
- unsigned char* baseAddr;
- long rowBytes;
- } YV12_PLANE;
- typedef struct {
- YV12_PLANE y;
- YV12_PLANE u;
- YV12_PLANE v;
- } YV12_PLANES;
- class IVideoOutput
- {
- public:
- virtual ~IVideoOutput() { }
- virtual int open(int w, int h, int vflip, double aspectratio, unsigned int fmt)=0;
- virtual void setcallback(LRESULT (*msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), void *token) { }
- virtual void close()=0;
- virtual void draw(void *frame)=0;
- virtual void drawSubtitle(SubsItem *item) { }
- virtual void showStatusMsg(const char *text) { }
- virtual int get_latency() { return 0; }
- virtual void notifyBufferState(int bufferstate) { } /* 0-255*/
- virtual int extended(int param1, int param2, int param3) { return 0; } // Dispatchable, eat this!
- };
- class ITrackSelector
- {
- public:
- virtual int getNumAudioTracks()=0;
- virtual void enumAudioTrackName(int n, const char *buf, int size)=0;
- virtual int getCurAudioTrack()=0;
- virtual int getNumVideoTracks()=0;
- virtual void enumVideoTrackName(int n, const char *buf, int size)=0;
- virtual int getCurVideoTrack()=0;
- virtual void setAudioTrack(int n)=0;
- virtual void setVideoTrack(int n)=0;
- };
- #endif //cplusplus
- #endif//NO_IVIDEO_DECLARE
- // these messages are callbacks that you can grab by subclassing the winamp window
- // wParam =
- #define IPC_CB_WND_EQ 0 // use one of these for the param
- #define IPC_CB_WND_PE 1
- #define IPC_CB_WND_MB 2
- #define IPC_CB_WND_VIDEO 3
- #define IPC_CB_WND_MAIN 4
- #define IPC_CB_ONSHOWWND 600
- #define IPC_CB_ONHIDEWND 601
- #define IPC_CB_GETTOOLTIP 602
- #define IPC_CB_MISC 603
- #define IPC_CB_MISC_TITLE 0
- #define IPC_CB_MISC_VOLUME 1 // volume/pan
- #define IPC_CB_MISC_STATUS 2
- #define IPC_CB_MISC_EQ 3
- #define IPC_CB_MISC_INFO 4
- #define IPC_CB_MISC_VIDEOINFO 5
- #define IPC_CB_CONVERT_STATUS 604 // param value goes from 0 to 100 (percent)
- #define IPC_CB_CONVERT_DONE 605
- #define IPC_ADJUST_FFWINDOWSMENUPOS 606
- /* (requires Winamp 2.9+)
- ** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFWINDOWSMENUPOS);
- ** moves where winamp expects the freeform windows in the menubar windows main menu. Useful if you wish to insert a
- ** menu item above extra freeform windows.
- */
- #define IPC_ISDOUBLESIZE 608
- #define IPC_ADJUST_FFOPTIONSMENUPOS 609
- /* (requires Winamp 2.9+)
- ** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFOPTIONSMENUPOS);
- ** moves where winamp expects the freeform preferences item in the menubar windows main menu. Useful if you wish to insert a
- ** menu item above preferences item.
- */
- #define IPC_GETTIMEDISPLAYMODE 610 // returns 0 if displaying elapsed time or 1 if displaying remaining time
- #define IPC_SETVISWND 611 // param is hwnd, setting this allows you to receive ID_VIS_NEXT/PREVOUS/RANDOM/FS wm_commands
- #define ID_VIS_NEXT 40382
- #define ID_VIS_PREV 40383
- #define ID_VIS_RANDOM 40384
- #define ID_VIS_FS 40389
- #define ID_VIS_CFG 40390
- #define ID_VIS_MENU 40391
- #define IPC_GETVISWND 612 // returns the vis cmd handler hwnd
- #define IPC_ISVISRUNNING 613
- #define IPC_CB_VISRANDOM 628 // param is status of random
- #define IPC_SETIDEALVIDEOSIZE 614 // sent by winamp to winamp, trap it if you need it. width=HIWORD(param), height=LOWORD(param)
- #define IPC_GETSTOPONVIDEOCLOSE 615
- #define IPC_SETSTOPONVIDEOCLOSE 616
- typedef struct {
- HWND hwnd;
- int uMsg;
- int wParam;
- int lParam;
- } transAccelStruct;
- #define IPC_TRANSLATEACCELERATOR 617
- typedef struct {
- int cmd;
- int x;
- int y;
- int align;
- } windowCommand; // send this as param to an IPC_PLCMD, IPC_MBCMD, IPC_VIDCMD
- #define IPC_CB_ONTOGGLEAOT 618
- #define IPC_GETPREFSWND 619
- #define IPC_SET_PE_WIDTHHEIGHT 620 // data is a pointer to a POINT structure that holds width & height
- #define IPC_GETLANGUAGEPACKINSTANCE 621
- #define IPC_CB_PEINFOTEXT 622 // data is a string, ie: "04:21/45:02"
- #define IPC_CB_OUTPUTCHANGED 623 // output plugin was changed in config
- #define IPC_GETOUTPUTPLUGIN 625
- #define IPC_SETDRAWBORDERS 626
- #define IPC_DISABLESKINCURSORS 627
- #define IPC_CB_RESETFONT 629
- #define IPC_IS_FULLSCREEN 630 // returns 1 if video or vis is in fullscreen mode
- #define IPC_SET_VIS_FS_FLAG 631 // a vis should send this message with 1/as param to notify winamp that it has gone to or has come back from fullscreen mode
- #define IPC_SHOW_NOTIFICATION 632
- #define IPC_GETSKININFO 633
- #define IPC_GET_MANUALPLADVANCE 634
- /* (requires Winamp 5.03+)
- ** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_MANUALPLADVANCE);
- **
- ** IPC_GET_MANUALPLADVANCE returns the status of the Manual Playlist Advance (1 if set)
- */
- #define IPC_SET_MANUALPLADVANCE 635
- /* (requires Winamp 5.03+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_MANUALPLADVANCE);
- **
- ** IPC_SET_MANUALPLADVANCE sets the status of the Manual Playlist Advance option (1 to turn it on)
- */
- #define IPC_GET_NEXT_PLITEM 636
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_NEXT_PLITEM);
- **
- ** Sent to Winamp's main window when an item has just finished playback or the next button has been pressed and
- ** requesting the new playlist item number to go to.
- ** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number.
- ** -1 for normal winamp operation (default) or the new item number in the playlist to play.
- */
- #define IPC_GET_PREVIOUS_PLITEM 637
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_PREVIOUS_PLITEM);
- **
- ** Sent to Winamp's main window when the previous button has been pressed and Winamp is requesting the new playlist item number to go to.
- ** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number.
- ** -1 for normal winamp operation (default) or the new item number in the playlist to play.
- */
- #define IPC_IS_WNDSHADE 638
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,wnd,IPC_IS_WNDSHADE);
- **
- ** 'wnd' is window id as defined for IPC_GETWND, or -1 for main window
- ** Returns 1 if wnd is set to winshade mode, or 0 if it is not
- */
- #define IPC_SETRATING 639
- /* (requires Winamp 5.04+ with ML)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,rating,IPC_SETRATING);
- ** 'rating' is an int value from 0 (no rating) to 5
- */
- #define IPC_GETRATING 640
- /* (requires Winamp 5.04+ with ML)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETRATING);
- ** returns the current item's rating
- */
- #define IPC_GETNUMAUDIOTRACKS 641
- /* (requires Winamp 5.04+)
- ** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMAUDIOTRACKS);
- ** returns the number of audio tracks for the currently playing item
- */
- #define IPC_GETNUMVIDEOTRACKS 642
- /* (requires Winamp 5.04+)
- ** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMVIDEOTRACKS);
- ** returns the number of video tracks for the currently playing item
- */
- #define IPC_GETAUDIOTRACK 643
- /* (requires Winamp 5.04+)
- ** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETAUDIOTRACK);
- ** returns the id of the current audio track for the currently playing item
- */
- #define IPC_GETVIDEOTRACK 644
- /* (requires Winamp 5.04+)
- ** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVIDEOTRACK);
- ** returns the id of the current video track for the currently playing item
- */
- #define IPC_SETAUDIOTRACK 645
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETAUDIOTRACK);
- ** switch the currently playing item to a new audio track
- */
- #define IPC_SETVIDEOTRACK 646
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETVIDEOTRACK);
- ** switch the currently playing item to a new video track
- */
- #define IPC_PUSH_DISABLE_EXIT 647
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_PUSH_DISABLE_EXIT );
- ** lets you disable or re-enable the UI exit functions (close button,
- ** context menu, alt-f4).
- ** call IPC_POP_DISABLE_EXIT when you are done doing whatever required
- ** preventing exit
- */
- #define IPC_POP_DISABLE_EXIT 648
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_POP_DISABLE_EXIT );
- ** see IPC_PUSH_DISABLE_EXIT
- */
- #define IPC_IS_EXIT_ENABLED 649
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_EXIT_ENABLED);
- ** returns 0 if exit is disabled, 1 otherwise
- */
- #define IPC_IS_AOT 650
- /* (requires Winamp 5.04+)
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_AOT);
- ** returns status of always on top flag. note: this may not match the actual
- ** TOPMOST window flag while another fullscreen application is focused
- */
- #define IPC_USES_RECYCLEBIN 651
- /*
- ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_USES_RECYCLEBIN);
- ** returns 1 if deleted files should be sent to the recycle bin.
- ** returns 0 if deleted files should be deleted permanently.
- **
- ** You should check for this option if your plugin deletes files
- ** so that your setting matches the winamp setting
- */
- // >>>>>>>>>>> Next is 652
- #define IPC_PLCMD 1000
- #define PLCMD_ADD 0
- #define PLCMD_REM 1
- #define PLCMD_SEL 2
- #define PLCMD_MISC 3
- #define PLCMD_LIST 4
- #define IPC_MBCMD 1001
- #define MBCMD_BACK 0
- #define MBCMD_FORWARD 1
- #define MBCMD_STOP 2
- #define MBCMD_RELOAD 3
- #define MBCMD_MISC 4
- #define IPC_VIDCMD 1002
- #define VIDCMD_FULLSCREEN 0
- #define VIDCMD_1X 1
- #define VIDCMD_2X 2
- #define VIDCMD_LIB 3
- #define VIDPOPUP_MISC 4
- #define IPC_MBURL 1003 //sets the URL
- #define IPC_MBGETCURURL 1004 //copies the current URL into wParam (have a 4096 buffer ready)
- #define IPC_MBGETDESC 1005 //copies the current URL description into wParam (have a 4096 buffer ready)
- #define IPC_MBCHECKLOCFILE 1006 //checks that the link file is up to date (otherwise updates it). wParam=parent HWND
- #define IPC_MBREFRESH 1007 //refreshes the "now playing" view in the library
- #define IPC_MBGETDEFURL 1008 //copies the default URL into wParam (have a 4096 buffer ready)
- #define IPC_STATS_LIBRARY_ITEMCNT 1300 // updates library count status
- // IPC 2000-3000 reserved for freeform messages, see gen_ff/ff_ipc.h
- #define IPC_FF_FIRST 2000
- #define IPC_FF_LAST 3000
- #define IPC_GETDROPTARGET 3001
- #define IPC_PLAYLIST_MODIFIED 3002 // sent to main wnd whenever the playlist is modified
- #define IPC_PLAYING_FILE 3003 // sent to main wnd with the file as parm whenever a file is played
- #define IPC_FILE_TAG_MAY_HAVE_UPDATED 3004 // sent to main wnd with the file as parm whenever a file tag might be updated
- #define IPC_ALLOW_PLAYTRACKING 3007
- // send nonzero to allow, zero to disallow
- #define IPC_HOOK_OKTOQUIT 3010 // return 0 to abort a quit, nonzero if quit is OK
- #define IPC_WRITECONFIG 3011 // pass 2 to write all, 1 to write playlist + common, 0 to write common+less common
- #define IPC_TOGGLE_RESIZE 3012 // USE THIS TO TOGGLE RESIZING OFF/ON BP.
- // USE THIS TO PASS A URL TO AD WINDOW bp
- #define IPC_SHOW_AD_URL 3013 // pass the URL (char *) in lparam
- #define IPC_SHOW_HWND 3014 // HWND of AdBox is in lparam
- // pass a string to be the name to register, and returns a value > 65536, which is a unique value you can use
- // for custom WM_WA_IPC messages.
- #define IPC_REGISTER_WINAMP_IPCMESSAGE 65536
- #endif//_WA_IPC_H_
|