![]() |
Winamp > Aktueller Titel
Hallo,
ich lausche des öfteren mal einigen Livestreams aus dem Internet über Winamp. Nun hab ich mir gedacht das es ganz schön wäre wenn ich mir ein kleines Programm bastel das auf Knopfdruck den aktuell gespielten Titel (der mir gefällt) in einer Liste speichert. Meine Frage dazu ist nun ob von Euch vielleicht Jemand schon etwas ähnliches gemacht hat und/oder eine Idee hätte wie ich an den Text der in Winamp durchläuft bzw. in der Playlist auftaucht herran komme. MfG |
Re: Winamp > Aktueller Titel
Hi!
Ich hab da mal was kleines vorbereitet: :mrgreen:
Delphi-Quellcode:
function EnumWindowsProc(const hWnd : Longword; Param: lParam): LongBool; stdcall;
var Buffer: array[0..1024] of Char; begin Result := True; GetWindowText(hWnd, Buffer, sizeof(Buffer)); if lstrlen(Buffer) = 0 then begin exit; end else begin Form1.listbox1.items.Add (buffer); end; end;
Delphi-Quellcode:
function GetText(Wnd: HWND): string;
var textlength: Integer; Text: PChar; begin textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if textlength = 0 then Result := '' else begin GetMem(Text, textlength + 1); // Änderung -> if Assigned(Text) then try SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text)); // Result := Text; // Änderung -> SetString(Result, Text, lstrlen(Text)); finally FreeMem(Text); end; end; end;
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer; LPARRAM : DWord; str: string; begin if not WinAmp1.Checked then begin listbox1.Clear; EnumWindows (@EnumWindowsProc,Integer(@LPARRAM)); for i:=0 to Listbox1.Items.count-1 do begin if pos(' - Winamp', listbox1.Items[i]) <> 0 then begin str:=copy(listbox1.Items[i],1+pos(' ', listbox1.Items[i]),pos(' - Winamp', listbox1.Items[i])-1-pos(' ', listbox1.Items[i])); RegistryEintrag('['+str+']'); Desktopschrift(str); end; end; end; end; Ist aus nem Programm rauskopiert, ich hoffe, ich habe alle relevanten Stellen... Ciao Frederic |
Re: Winamp > Aktueller Titel
Ich glaube es gibt sogar ne WinAMP API, vielleicht kann die das? :gruebel:
|
Re: Winamp > Aktueller Titel
Zitat:
Dafür gibs jetzt ein SDK ( ![]() Vielleicht hilft dir das. |
Re: Winamp > Aktueller Titel
erstmal danke für eure hilfe,
die sdk ist leider komplett in c/c++ erstellt worden, damit weiß ich leider nichts anzufangen :( |
Re: Winamp > Aktueller Titel
ich bin unter
![]() danke nochmal für die hilfe
Delphi-Quellcode:
var
P: PChar; Handle: HWND; title: string; begin getmem(p,255); Handle:=FindWindow('Winamp v1.x',nil); if Handle<>0 then begin GetWindowText(Handle,P,255); if pos('- Winamp',P)>0 then begin title:=Copy(P,1,-2+Length(P)-(Length(P)-Pos('- Winamp',P))); end; end; showmessage(title); |
Re: Winamp > Aktueller Titel
Hi,
auch wenn das Problem schon gelöst scheint, hier zwei Funktionen aus meinem Archiv:
Delphi-Quellcode:
Index gibt jeweils die Position des Playlisteintrags an (beginnend bei 0), -1 entspricht dem aktuellen Eintrag.function GetWinampSongTitle(Index: Integer): String; var hWndWinamp, TempHandle : THandle; dat2: array[0..500] of Char; TrackPos: Integer; temp, MPointer: Cardinal; begin hwndWinamp := FindWindow('Winamp v1.x',nil); if (Index < 0) then TrackPos := SendMessage(hWndWinamp, WM_USER, 0, 125) else TrackPos := Index; 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); Result := String(dat2); end; function 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; Viele Grüße, Markus |
Re: Winamp > Aktueller Titel
oh danke dir =)
damit läßt sich sicherlich einiges mehr anfangen :dance: |
Re: Winamp > Aktueller Titel
Cool, also Titel bekomm ich, aber nur den, den ich eingebe, also z.B.
edit1.Text := GetWinampSongTitle(8); Wie kann ich es machen, dass er den titel nimmt, der gerade läuft ? MFG |
Re: Winamp > Aktueller Titel
Hi!
Hast du dir mal meine Codes angesehen? Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz