由于有许多开源项目实现了这个功能,你可以检查一下(如 MPC-HC、PsyMP3、Songbird 等),我将解释它是如何完成的:
首先,您构建一个 Unicode 字符串,如下所示:
Player\0Type\0Playing\0Format\0Artist\0Type\0Album\0GUID\0
(\0 不是 NUL,所以一定要避开它们)
- 播放器:您的音乐播放器的名称
- 类型:媒体类型,此处:“音乐”
- 播放中:1代表播放,0代表停止
- 格式:“正在播放”旁边的字符串,例如:
A3FPlayer: {1} - {0}
- 艺术家、标题和专辑不言自明
- GUID:WMCONTENTID
然后你像这样构建一个 COPYDATASTRUCT:
COPYDATASTRUCT data;
data.dwData = 0x0547; //1351 decimal
data.lpData = (PVOID)(LPCWSTR)MsnMsg;
data.cbData = MsnMsgSize * 2 + 2;
最后将该结构传递给MsnMsgrUIManager
您可以找到的句柄FindWindowEx
:
HWND hWnd = FindWindowEx(NULL, NULL, L"MsnMsgrUIManager", NULL);
SendMessage(hWnd, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&data);