As a further note, I've performed a basic test of this by adding a breakpoint to the start of the int_cad track information call:
void CJrPlugin::SendTrackInfo()
{
CComPtr<IMJCurPlaylistAutomation> playlist = c_MjObject->GetCurPlaylist();
if (!playlist) return;
CComPtr<IMJFileAutomation> file = playlist->GetFile(playlist->Position);
if (!file) return;
WCHAR buffer[2048];
int len = _snwprintf_s(
buffer,
_TRUNCATE,
L"%s\t%s\t%s\t%s\t%ld\t\t%ld\t%u\t%s\t%ld\t%s\t\t\t\t\t\t\t%ld",
(WCHAR*)file->Name,
(WCHAR*)file->Artist,
(WCHAR*)file->Album,
(WCHAR*)file->Genre,
file->Year,
file->Tracknumber,
(UINT)file->Duration,
(WCHAR*)file->Filename,
file->Rating * 2,
(WCHAR*)file->GetImageFile(IMAGEFILE_DISPLAY_NO_DEFAULT),
file->Bitrate);
COPYDATASTRUCT cds;
cds.cbData = (len + 1) * sizeof(WCHAR);
cds.dwData = IPC_CURRENT_TRACK_NOTIFICATION;
cds.lpData = (PVOID)&buffer;
::SendMessage(c_CadWindow, WM_COPYDATA, (WPARAM)c_Window, (LPARAM)&cds);
}
This should be being called every time the plugin is notified of a state change via COM, but it isn't. The only time this is getting called is when a manual refresh of the skin is selected in Rainmeter, and it deliberately asks for the information rather than waiting for the state change message.
Rolling back to .49 and this is called as expected every time the player state changes.
-Leezer-