Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Winamp > Aktueller Titel (https://www.delphipraxis.net/37748-winamp-aktueller-titel.html)

endeffects 9. Jan 2005 18:15


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

fkerber 9. Jan 2005 18:18

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

Ultimator 9. Jan 2005 18:27

Re: Winamp > Aktueller Titel
 
Ich glaube es gibt sogar ne WinAMP API, vielleicht kann die das? :gruebel:

PierreB 9. Jan 2005 18:35

Re: Winamp > Aktueller Titel
 
Zitat:

Ich glaube es gibt sogar ne WinAMP API, vielleicht kann die das?
Ja das gibt es, ich finds auf der WinAmp-Page aber net mehr. :gruebel:
Dafür gibs jetzt ein SDK ( WinAmp SDK )

Vielleicht hilft dir das.

endeffects 9. Jan 2005 18:57

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 :(

endeffects 9. Jan 2005 19:07

Re: Winamp > Aktueller Titel
 
ich bin unter http://www.torry.net/quicksearchd.ph...namp&Title=Yes fündig geworden :)
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);

DaFox 9. Jan 2005 19:17

Re: Winamp > Aktueller Titel
 
Hi,

auch wenn das Problem schon gelöst scheint, hier zwei Funktionen aus meinem Archiv:

Delphi-Quellcode:
 
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;
Index gibt jeweils die Position des Playlisteintrags an (beginnend bei 0), -1 entspricht dem aktuellen Eintrag.

Viele Grüße,
Markus

endeffects 9. Jan 2005 19:29

Re: Winamp > Aktueller Titel
 
oh danke dir =)
damit läßt sich sicherlich einiges mehr anfangen :dance:

Äfan 10. Jan 2005 13:39

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

fkerber 10. Jan 2005 13:44

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.
Seite 1 von 2  1 2      

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