О пользе плагинов и спорить не приходиться. Потому многие крупные
разработчики программного обеспечения предусматривают в своих творениях
поддержку модулей, написанных другими людьми. Так поступила и компания Nullsoft,
создатель известного компьютерного плеера - Winamp. Для непосредственного
обращения к плееру были созданы специальные функции - WinampApi.
Алгоритм взаимодействия таков:
- Находим Handle окна Winamp'a. (можно так - findwindow('Winamp v1.x',nil) )
- С помощью команды Sendmessage, посылаем окну сообщение вида WM_COMMAND или
WM_USER c определёнными параметрами (см. Приложение)
Итак, напишем, например, процедуру для проигрывания заданного трека с
заданной громкостью. В дальнейшем, её можно будет использовать в плагине или в
программе, работающей совместно с Winamp.
procedure play_track_with_volume(track_number:integer;volume:integer);
// Track_number - номер трека (от 1 до величины количества треков)
// Volume - громкость (от 0 до 255)
var
h: hwnd;
begin
h:=findwindow('Winamp v1.x',g>nil); // Находим окно
sendmessage(h,WM_USER,track_number-1,121); // Устанавливаем номер трека
sendmessage(h,WM_USER,volume,122); // Устанавливаем громкость
sendmessage(h,WM_COMMAND,40045,0); // Проигрываем трек
end;
Приложение:
Параметры сообщений и их функции. (Взято с официального сайта):
WM_COMMAND Messages
|
Previous track button |
40044 |
|
Next track button |
40048 |
|
Play button |
40045 |
|
Pause/Unpause button |
40046 |
|
Stop button |
40047 |
|
Fadeout and stop |
40147 |
|
Stop after current track |
40157 |
|
Fast-forward 5 seconds |
40148 |
|
Fast-rewind 5 seconds |
40144 |
|
Start of playlist |
40154 |
|
Go to end of playlist |
40158 |
|
Open file dialog |
40029 |
|
Open URL dialog |
40155 |
|
Open file info box |
40188 |
|
Set time display mode to
elapsed |
40037 |
|
Set time display mode to
remaining |
40038 |
|
Toggle preferences screen |
40012 |
|
Open visualization options |
40190 |
|
Open visualization plug-in
options |
40191 |
|
Execute current visualization
plug-in |
40192 |
|
Toggle about box |
40041 |
|
Toggle title Autoscrolling |
40189 |
|
Toggle always on top |
40019 |
|
Toggle Windowshade |
40064 |
|
Toggle Playlist Windowshade |
40266 |
|
Toggle doublesize mode |
40165 |
|
Toggle EQ |
40036 |
|
Toggle playlist editor |
40040 |
|
Toggle main window visible |
40258 |
|
Toggle minibrowser |
40298 |
|
Toggle easymove |
40186 |
|
Raise volume by 1% |
40058 |
|
Lower volume by 1% |
40059 |
|
Toggle repeat |
40022 |
|
Toggle shuffle |
40023 |
|
Open jump to time dialog |
40193 |
|
Open jump to file dialog |
40194 |
|
Open skin selector |
40219 |
|
Configure current
visualization plug-in |
40221 |
|
Reload the current skin |
40291 |
|
Close Winamp |
40001 |
|
Moves back 10 tracks in
playlist |
40197 |
|
Show the edit bookmarks |
40320 |
|
Adds current track as a
bookmark |
40321 |
|
Play audio CD |
40323 |
|
Load a preset from EQ |
40253 |
|
Save a preset to EQF |
40254 |
|
Opens load presets dialog |
40172 |
|
Opens auto-load presets
dialog |
40173 |
|
Load default preset |
40174 |
|
Opens save preset dialog |
40175 |
|
Opens auto-load save preset |
40176 |
|
Opens delete preset dialog |
40178 |
|
Opens delete an auto load
preset dialog |
40180 |
WM_USER Messages
0 |
Retrieves the version of
Winamp running. Version will be 0x20yx for 2.yx. This is a good way to
determine if you did in fact find the right window, etc. |
100 |
Starts playback. A lot like
hitting 'play' in Winamp, but not exactly the same |
101 |
Clears Winamp's internal
playlist. |
102 |
Begins play of selected
track. |
103 |
Makes Winamp change to the
directory C:download |
104 |
Returns the status of
playback. If 'ret' is 1, Winamp is playing. If 'ret' is 3, Winamp is paused.
Otherwise, playback is stopped. |
105 |
If data is 0, returns the
position in milliseconds of playback. If data is 1, returns current track
length in seconds. Returns -1 if not playing or if an error occurs. |
106 |
Seeks within the current
track. The offset is specified in 'data', in milliseconds. |
120 |
Writes out the current
playlist to Winampdirwinamp.m3u, and returns the current position in the
playlist. |
121 |
Sets the playlist position to
the position specified in tracks in 'data'. |
122 |
Sets the volume to 'data',
which can be between 0 (silent) and 255 (maximum). |
123 |
Sets the panning to 'data',
which can be between 0 (all left) and 255 (all right). |
124 |
Returns length of the current
playlist, in tracks. |
125 |
Returns the position in the
current playlist, in tracks (requires Winamp 2.05+). |
126 |
Retrieves info about the
current playing track. Returns samplerate (i.e. 44100) if 'data' is set to
0, bitrate if 'data' is set to 1, and number of channels if 'data' is set to
2. (requires Winamp 2.05+) |
127 |
Retrieves one element of
equalizer data, based on what 'data' is set to. 0-9 The 10 bands of EQ data.
Will return 0-63 (+20db - -20db) 10 The preamp value. Will return 0-63
(+20db - -20db) 11 Enabled. Will return zero if disabled, nonzero if
enabled. |
128 |
Autoload. Will return zero if
disabled, nonzero if enabled. To set an element of equalizer data, simply
query which item you wish to set using the message above (127), then call
this message with data |
129 |
Adds the specified file to
the Winamp bookmark list |
135 |
Restarts Winamp |
200 |
Sets the current skin. 'data'
points to a string that describes what skin to load, which can either be a
directory or a .zip file. If no directory name is specified, the default
Winamp skin directory is assumed. |
201 |
Retrieves the current skin
directory and/or name. 'ret' is a pointer to the Skin name (or NULL if
error), and if 'data' is non-NULL, it must point to a string 260 bytes long,
which will receive the pathname to where the skin bitmaps are stored (which
can be either a skin directory, or a temporary directory when zipped skins
are used) (Requires Winamp 2.04+). |
202 |
Selects and executes a
visualization plug-in. 'data' points to a string which defines which plug-in
to execute. The string can be in the following formats: vis_whatever.dll
Executes the default module in vis_whatever.dll in your plug-ins directory.
vis_whatever.dll,1 executes the second module in vis_whatever.dll
C:pathvis_whatever.dll,1 executes the second module in vis_whatever.dll in
another directory |
211 |
Retrieves (and returns a
pointer in 'ret') a string that contains the filename of a playlist entry
(indexed by 'data'). Returns NULL if error, or if 'data' is out of range. |
212 |
Retrieves (and returns a
pointer in 'ret') a string that contains the title of a playlist entry
(indexed by 'data'). Returns NULL if error, or if 'data' is out of range. |
241 |
Opens an new URL in the
minibrowser. If the URL is NULL it will open the Minibrowser window |
242 |
Returns 1 if the internet
connecton is available for Winamp |
243 |
Asks Winamp to update the
information about the current title |
245 |
Sets the current playlist
item |
246 |
Retrives the current
Minibrowser URL into the buffer. |
247 |
Flushes the playlist cache
buffer |
248 |
Blocks the Minibrowser from
updates if value is set to 1 |
249 |
Opens an new URL in the
minibrowser (like 241) except that it will work even if 248 is set to 1 |
250 |
Returns the status of the
shuffle option (1 if set) |
251 |
Returns the status of the
repeat option (1 if set) |
252 |
Sets the status of the suffle
option (1 to turn it on) |
253 |
Sets the status of the repeat
option (1 to turn it on) |
Приятного Вам прослушивания музыки !!!
|