Entwickler-Ecke

Windows API - Winamp Titel und Songzeit auslesen


Default112 - Sa 25.02.06 15:19
Titel: Winamp Titel und Songzeit auslesen
Sooo... Ich hab da mal ein Problem :D

Ich möchte den Titel des aktuellen Liedes sowie die Position und die gesamtspieldauer auslesen. Im Grunde kein Problem, aber: Das Programm darf kein Winamp-Plugin werden O_o Ich hab im Grunde gar keinen Plan. Obwohl ich mit Plugins den Krempel ausgelesen hab und per Sendmessage an mein Programm geschickt hab, muss ich das ganze auch ohne Plugin schaffen.

Dazu habe ich folgenden Thread gefunden: klick [http://www.delphi-forum.de/viewtopic.php?t=4806&highlight=winamp+titel]

Dort wird gezeigt, wie man den Titel des aktuellen Liedes auslesen kann, und zwar so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetWinampFilename(data:Integer): String;
var Text, tempStr: String;
    hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos: Integer;
    temp, MPointer: Cardinal;
begin
  hwndWinamp:= FindWindow('Winamp v1.x',nil);
  if data<0 then TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , 125else TrackPos:=data;
  MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , 212);
  GetWindowThreadProcessId(hwndWinamp,TempHandle);
  hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
  ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
  CloseHandle(hwndWinamp);
  tempStr:= dat2;  // ;-)
  Result:= tempStr;
end;


Aber im Grunde verstehe ich da nur Bahnhof und meine Versuche das umzuschreiben sind leider in die Hose gegangen. Ich würde mich freuen, wenn mir da jemand auf die Sprünge helfen könnte.

Gruss
Def


Gausi - Sa 25.02.06 15:27

Ich bin auf diesen Thread auch schonmal gestoßen, und hab dann das [http://www.delphi-library.de/topic_wie+kann+man+die+Playlist+von+Winamp+einlesen_48816.html] daraus gemacht. Damit erhalte ich zwar auch nicht die Dauer des Stücks, aber mit dem Link zu der Winamp-Seite dürfte man dahinter kommen, wie man die Länge des Stückes bekommt.

btw.: Mit Plugins hat das nichts zu tun ;-)


Default112 - So 26.02.06 00:54

Nun ja, ich habe ja schon einiges mit dem SDK gemacht, so kann ich "theroretisch" auch die Zeit auslesen, nur funktioniert das von aussen nicht O_o Folgendes sollte laut SDK funktionieren:

Delphi-Quelltext
1:
SendMessage(hwndWinamp,WM_USER,0 , 105);                    

Damit bekomme ich die Dauer des aktuellen Songs als Integer-Variable zurück. Aber wie komme ich von aussen daran?

Gruss
Def


Gausi - So 26.02.06 09:58

Indem du in deinem Programm ein Funktion schreibst, dir dort zunächst das Winamp-Fensterhandle besorgst, und dann die Message dahin sendest. Das Ergebnis der Sendung ist dann dein Wert...Was ich in der Library geschrieben habe, funktioniert von deinem Programm aus. Die einzige Bedingung ist, dass auch Winamp gerade laufen muss...


Default112 - So 26.02.06 19:08

JAAA! Schlagt mich! Es war ja so einfach -_- Ich hatte zunächst versucht das SendMessage in die Funktion oben einzubauen. Aber naja. Jetzt funktioniert es und ich bin glücklich ;)