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]