from the winamp API reference-
2.3 WM_USER Messages
WM_USER messages are sent using SendMessage(). In C/C++, you can send these messages by calling:
int ret=SendMessage(hwndWinamp,WM_USER, data, id);
data is used by many of the messages, but not all. For messages where the meaning of data is not defined, simply use 0.
Here is a list of the currently supported ids that you can use from within Winamp plug-ins or from other applications (see plug-in only WM_USER messages, below, for more):
124 Returns length of the current playlist, in tracks.
125 Returns the position in the current playlist, in tracks (requires Winamp 2.05+).
could support WM_USER messages with id 124 and 125 be included in your foo_winamp_spam?
I used Winspector to figure out this is how trillian's plug-in fails, it asks for 124, and if it receives a valid response, it then asks for 125.
If 125 is different, then it knows that the song has changed.