Delphi-PRAXiS

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

Äfan 10. Jan 2005 14:03

Re: Winamp > Aktueller Titel
 
:| ja hab ich !?

fkerber 10. Jan 2005 14:08

Re: Winamp > Aktueller Titel
 
Hi!

Ja und?
Damit geht es. Wo ist dein Problem?


Ciao Frederic

Äfan 10. Jan 2005 14:24

Re: Winamp > Aktueller Titel
 
Oh man ich gebs auf ! :evil:

fkerber 10. Jan 2005 14:31

Re: Winamp > Aktueller Titel
 
Hi!

Dank der präzisen Fehlerbeschreibung lässt sich dir ja einfach helfen.... :roll:


Ciao Frederic

Äfan 10. Jan 2005 14:38

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.

fkerber 10. Jan 2005 14:40

Re: Winamp > Aktueller Titel
 
Hi!

Schau dir mal meinen Beitrag an (2. von oben)
Damit geht das.


Ciao Frederic

Äfan 10. Jan 2005 14:48

Re: Winamp > Aktueller Titel
 
Ja ok :roll:

voodoo 9. Apr 2005 14:56

Re: Winamp > Aktueller Titel
 
Wie kann ich überprüfen, ob WinAmp überhaupt läuft?

Danke!

moritz 9. Apr 2005 14:58

Re: Winamp > Aktueller Titel
 
FindWindow

Dash 9. Apr 2005 15:39

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