![]() |
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 |
Re: Winamp > Aktueller Titel
:| ja hab ich !?
|
Re: Winamp > Aktueller Titel
Hi!
Ja und? Damit geht es. Wo ist dein Problem? Ciao Frederic |
Re: Winamp > Aktueller Titel
Oh man ich gebs auf ! :evil:
|
Re: Winamp > Aktueller Titel
Hi!
Dank der präzisen Fehlerbeschreibung lässt sich dir ja einfach helfen.... :roll: Ciao Frederic |
Re: Winamp > Aktueller Titel
Also: Ich habe den Code (der oben steht) nun in delphi eingefügt ! Wenn ich es jetzt starten will, will er einen Wert für "Index". OK dann gebe ich z.B. 8 ein, also gibt er mir den namen von titel 8. Ich will aber das er mir den Titel zurückgibt, der läuft ! Wie geht das mit dem code oben ? Also ich bekomme das nicht hin.
|
Re: Winamp > Aktueller Titel
Hi!
Schau dir mal meinen Beitrag an (2. von oben) Damit geht das. Ciao Frederic |
Re: Winamp > Aktueller Titel
Ja ok :roll:
|
Re: Winamp > Aktueller Titel
Wie kann ich überprüfen, ob WinAmp überhaupt läuft?
Danke! |
Re: Winamp > Aktueller Titel
FindWindow
|
Re: Winamp > Aktueller Titel
Cool, danke Flomei :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 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