Folgender Code bewirkt die Anzeige des aktuell gespielten Musiktitels, des aktuell gespielten Spiels oder einer beliebigen anderen Aktivität im MSN Messenger Version 7.0.0816 und höher. Andere Messenger-Nutzer können diese Nachricht auch sehen (wie vom "Was ich gerade höre:"-Feature bekannt).
Delphi-Quellcode:
procedure ChangeMSNActivity(aReset: boolean; aArtist, aAlbum, aTitle:
string; aActivityType:
string = '
Music'; aDisplayFormat:
string = '
{0} - {1}'; aWMContentID:
string = '
');
var
hContactList: THandle;
//das Handle der MSN Messenger Kontaktliste
cdsCopyDataStruct: TCopyDataStruct;
//benötigt für SendMessage
wBuffer:
array [0..127]
of WideChar;
//die Nachricht
begin
//den Buffer initialisieren
FillChar(wBuffer, SizeOf(wBuffer), #0);
//wenn aReset = true, wird der Status auf die persönliche Statusnachricht zurückgesetzt
//sonst wird der jeweilige Status (Music, Games, Office oder Empty) gesetzt und die Parameter übergeben.
//Die Paramater werden durch den string '\0' voneinander getrennt (entspricht hier *nicht*
// chr(0), da der Messenger den string intern auswertet!)
if aReset
then
StringToWideChar('
\0'+aActivityType+'
\00\0\0\0\0\0'#0, @wBuffer[0], 128)
else
StringToWideChar('
\0'+aActivityType+'
\01\0' + aDisplayFormat + '
\0' + aTitle + '
\0' + aArtist + '
\0' + aAlbum + '
\0' + aWMContentID + #0, @wBuffer[0], 128);
//das TCopyDataStruct für SendMessage vorbereiten
FillChar(cdsCopyDataStruct, SizeOf(TCopyDataStruct), #0);
with cdsCopyDataStruct
do
begin
cbData := SizeOf(wBuffer);
//größe der Nachricht
dwData := $547;
//"magic number", die den Messenger anweist, die Nachricht wie gwünscht zu interpretieren
lpData := @wBuffer[0];
//die Nachricht
end;
//nun eine Windows Message an alle Messenger Kontaktlistenfenster senden
// (falls mehrere Instanzen gestartet)
hContactList := FindWindowEx(0, 0, '
MsnMsgrUIManager',
nil);
while hContactList <> 0
do
begin
SendMessage(hContactList, WM_COPYDATA, 0, Integer(@cdsCopyDataStruct));
hContactList := FindWindowEx(0, hContactList, '
MsnMsgrUIManager',
nil);
end;
end;
Die Prozedur ist denkbar einfach aufzurufen:
procedure ChangeMSNActivity(aReset: boolean; aArtist, aAlbum, aTitle: string; aActivityType: string = 'Music'; aDisplayFormat: string = '{0} - {1}'; aWMContentID: string = '');
aReset: Wenn true, wird die normale Persönliche Statusnachricht wieder angezeigt
aArtist, aAlbum, aTitle: Künstler, Album und Titelname des aktuellen Songs*
aActivityType: Typ der Aktivität* ('Music', 'Games' oder 'Office'). Im Messenger wird ein entsprechendes Symbol angezeigt.
aDisplayFormat: Formatstring, der die übergebenen Parameter aArtist, aAlbum und aTitle formatiert**
aWMContentID: WindowsMedia-Content ID des Songs (Wird nicht benötigt - Es dürfte recht schwer für nicht-Microsoftler sein, diese ID abzufragen
)
*
Aktivitäts-Typen:- 'Music' - Im Messenger wird ein Kopfhörer-Icon neben dem Displaytext angezeigt und der Displaytext fungiert als Link zum MSN-Music Shop, wo man den jew. Song kaufen kann
- 'Games' - Im Messenger wird ein Spiele-Icon neben dem Displaytext angezeigt. Kein Link
- 'Office' - Im Messenger wird das Microsoft Office-Icon neben dem Displaytext angezeigt. Kein Link
**
Formatstring aDisplayFormat:
Dieser String formatiert die übergebenen Parameter aArtist, aAlbum und aTitle zur Anzeige im Messenger. Dabei sind folgende Platzhalter möglich:
- '{0}' - Titelname
- '{1}' - Künstler
- '{2}' - Album
Beispielaufrufe:
Delphi-Quellcode:
//einfache Angabe eines Liedes (Resultat im Messenger: 'Fiesta Remix - Jay-Z feat. R. Kelly & DJ Envy')
ChangeMSNActivity(false, 'Jay-Z feat. R. Kelly & DJ Envy', 'TP3', 'Fiesta Remix');
//einfache Angabe eines Spiels (Resultat im Messenger: 'Spielt Tetris')
ChangeMSNActivity(false, 'Tetris', '', '', 'Games', 'Spielt {1}');
//einfache Angabe einer "Büro-Aktivität" (Resultat im Messenger: 'Surft im Internet')
ChangeMSNActivity(false, 'Tetris', '', '', 'Office', 'Surft im Internet');
//geändertes Format für Lieder (Resultat im Messenger: 'Jay-Z feat. R. Kelly & DJ Envy - Fiesta Remix (TP3)')
ChangeMSNActivity(false, 'Jay-Z feat. R. Kelly & DJ Envy', 'TP3', 'Fiesta Remix', 'Music', '{1} - {0} ({2})');
//GANZ WICHTIG: Zurücksetzen der Aktivität und Anzeigen der standardmäßigen Persönlichen Statusnachricht:
ChangeMSNActivity(true, '', '', '');
Hinweis: Seit der Version 7.0 bietet der MSN Messenger die Möglichkeit, den aktuell gespielten Musiktitel für andere Sichtbar zu machen. Dieses Feature war anfangs nur mit dem WindowsMediaPlayer nutzbar, später auch mit iTunes und durch ein WinAMP-PlugIn.
Clevere disassemblierer sind dem System auf die Schliche gekommen und haben den Code veröffentlicht, der es jedem Programmierer ermöglicht, eigene Songtitel zu setzen. Microsoft hat das System mit der aktuellen Messenger-Version 7.5 geändert.
Es kann also sein, dass sich die Redmonder mit der nächsten Version wieder etwas neues einfallen lassen und dieser Code infolgedessen nicht mehr funktionieren wird (gerade in Hinsicht auf den neuen "MSN Live Messenger"). Ich werde mich bemühen, den hier veröffentlichten Code in diesem Falle zu aktualisieren
[edit=Chakotay1308]Titel angepasst, Thread verschoben. Mfg, Chakotay1308[/edit]