О пользе плагинов и спорить не приходиться. Потому многие крупные разработчики программного обеспечения предусматривают в своих творениях поддержку модулей, написанных другими людьми. Так поступила и компания 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 Winampdir\winamp.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:\path\vis_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)
Приятного Вам прослушивания музыки !!!
В статье описывается взаимодействие с программой Winamp, включая использование плагинов и специальных функций WinampApi для работы с плеером.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.