Einzelnen Beitrag anzeigen

voodoo

Registriert seit: 9. Apr 2005
17 Beiträge
 
#1

Pfad des aktuellen WinAmp-Liedes korrekt auslesen

  Alt 5. Mai 2005, 22:02
Zum Auslesen des Pfades benutze ich derzeit folgende Funktion:

Delphi-Quellcode:
function Tmain_form.GetWinampFileName(Index: Integer): String;
const
  IPC_GETPLAYLISTFILE = 211;
  WM_WA_IPC = WM_USER;
var
  Process, ReadCount, PID: DWord;
  hWndWinamp: hWnd;
  Title: String;
  iTitle: Integer;
begin
  hWndWinamp := FindWindow(PChar('Winamp v1.x'), nil);
  if (Index < 0) then Index := SendMessage(hWndWinamp, WM_USER, 0, 125);
  GetWindowThreadProcessId(hWndWinamp, @PID);
  Process := OpenProcess(PROCESS_VM_READ, FALSE, PID);
  SetLength(Title, 256);
  iTitle := SendMessage(hWndWinamp, WM_WA_IPC, Index, IPC_GETPLAYLISTFILE);
  ReadProcessMemory(Process, Pointer(iTitle), @Title[1], 256, ReadCount);
  CloseHandle(Process);
  Result := Title;
end;
Auf den ersten Blick scheint das auch recht gut zu funktionieren.

Allerdings versuche ich zu überprüfen, ob das Lied in einer Playlist ist, und dieser Pfad-Vergleich geht immer schief.
Beim Debuggen habe ich nun gemerkt, dass GetWinampFileName(-1) noch viel mehr enthält, als den Pfad des aktuellen Liedes.

Hier ein Beispiel:
Code:
'I:\MP3\xxx\yyy\zzz.mp3'#0'3'#0'a.mp3'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
Lässt sich die Funktion so erweitern, dass wirklich nur noch der Pfad enthalten ist oder muss ich den String immer irgendwie abschneiden?

Vielen Dank im Voraus!
Was

[edit=MrSpock]Zeilenumbrüche zwischen die vielen #0en eingefügt. Mfg, MrSpock[/edit]
  Mit Zitat antworten Zitat