Да вы что, даже не смешно..
Winamp умеет перехватывать сообщения WM_COPYDATA.
Об этом абсолютно все написано на
http://www.winamp.com (странно, да?)
'Вот небольшой пример, если лень лезть на сайт
Option Explicit
Option Base 1
' Ищет окно по handle или по имени класса.
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
' Посылает сообщение окну и ждет его обработки
' в отличие от PostMessage
Declare Function CopyDataSendMessage Lib "user32" Alias _
"SendMessageA" (ByVal WndID As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByRef lParam As COPYDATASTRUCT) As Long
' Ищет адрес строки в памяти
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
(ByVal lpString1 As String, ByVal lpString2 As String) _
As Long
Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type
Public hWndWinamp As Long
Public RetVal As Long
' Виндовая константа
Public Const WM_COPYDATA = &H4A
' Константа winamp (их мммммного, смотрите на
www.winamp.com)
Public Const waAddFile As Long = 100 '(aka IPC_PLAYFILE)
'----------------------------------------------------------
' По умолчанию имя класса winamp = "Winamp v1.x"
' Вы можете изменить его через команду /CLASS
' C:\path\to\winamp\winamp.exe /CLASS="myclassname"
' И использовать ваше имя класса для управления
'----------------------------------------------------------
Public Sub AddFile(filename As String, waclass As String)
' Adds a file to the playlist
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then ' облом случился, winamp не найден
Exit Sub
End If
Dim cds As COPYDATASTRUCT
cds.dwData = waAddFile
' = 100 (IPC_PLAYFILE)
cds.lpData = lstrcpy(filename, filename)
' Копируем имя файла в себя
' ничего не происходит, зато получаем адрес переменной
cds.cbData = Len(filename) + 1
' Резервируем пространство для имени файла и завершающего нуль символа
RetVal = CopyDataSendMessage(hWndWinamp, WM_COPYDATA, 0&,cds)
End Sub[url][/url]