Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Napster aktuellen Track auslesen (https://www.delphipraxis.net/132341-napster-aktuellen-track-auslesen.html)

dutyfree 10. Apr 2009 11:15


Napster aktuellen Track auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Morgen,
ist es irgendwie möglich den zurzeit spielenden Titel in der Napster Music Flatrate auszulesen?

fkerber 10. Apr 2009 11:16

Re: Napster aktuellen Track auslesen
 
Hi!

Steht er zufällig im Fenstertitel oder so?


Ciao, Frederic

dutyfree 10. Apr 2009 11:28

Re: Napster aktuellen Track auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Irgendwie hat das kein Fenster, aber im Taskmanager steht z.B. nur "Napster"..
Also eher nicht..

aber um kurz nur zu sagen was ich damit will, ich lass immer playlists durchlaufen und chill dabei aufm sofa und da kann ich dann nicht erkennen wie das aktuelle lied heißt, deswegen würd ichs gerne einfach in nem kleinen proggi in nem laben groß ausgeben lassen..

mkinzler 10. Apr 2009 11:47

Re: Napster aktuellen Track auslesen
 
was meint den WinSpy

dutyfree 10. Apr 2009 12:11

Re: Napster aktuellen Track auslesen
 
Ich hab das programm runtergeladen, dann das Napster fenster ausgewählt und irgendwo hab ich den Track dann gefunden unter
Zitat:

Static "Trackname" | 656212
Kann ich mit dem Programm dann auch auslesen lassen.
Nur wie gehe ich jetzt weitervor? Wie binde ich das in ein eigenes Programm ein?

mkinzler 10. Apr 2009 12:18

Re: Napster aktuellen Track auslesen
 
Ich nehme an, dass Toms das Programm in Delphi entwickelt hat. Deshalb müsste es auch in deinem eigene Programm gehen. Vielleicht helfen dir auch Luckies Links im verlinkten Thread

Meflin 10. Apr 2009 12:24

Re: Napster aktuellen Track auslesen
 
Zitat:

Zitat von dutyfree
Nur wie gehe ich jetzt weitervor? Wie binde ich das in ein eigenes Programm ein?

Das Tool hat doch CodeGeneratoren eingebaut, die dir den passenden Dlphi-Code gleich ausspucken ;)

dutyfree 10. Apr 2009 12:41

Re: Napster aktuellen Track auslesen
 
Ja eig cool, ich bekomm da ein Code:

Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  Dec(ChildNr);
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Break;
    Result := hChild;
  end;
end;

var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('PPAppFrameClass','Napster');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'CUISplitterWindow', nil);
    wndChild := FindWindowEx(wndChild, 0, '#32770', nil);
    wndChild := FindWindowEx(wndChild, 0, 'CUIHorSplitterWindow', nil);
    wndChild := FindWindowEx(wndChild, 0, '#32770', nil);
    wndChild := FindWindowEx2(wndChild,'Static', 6);
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
      FlashControl(wndChild); // internal function
    end;
  end;
Bei FlashControl meldet er zwar ein Fehler, das hab ich mal rausgenommen. Aber das einzige, was er mir dann ausgibt ist
Zitat:

Window Handle: 1049326
Das müsste ich halt noch auslesen, eben dieses Static "Name"

Meflin 10. Apr 2009 13:16

Re: Napster aktuellen Track auslesen
 
Das Handle hast du ja dann schonmal, das war eigentlich der schwerste Teil.

Mit MSDN-Library durchsuchenWM_GETTEXT solltest du jetzt eigentlich den Text auslesen können, in etwa so:
Delphi-Quellcode:
function GetWinText(aHandle: HWND): string;
var
  iBuffLen : Integer;
  pBuffer : PChar;
begin
  iBuffLen := SendMessage(aHandle, WM_GETTEXTLENGTH, 0, 0);
  if iBuffLen > 0 then begin
    Inc(iBuffLen);
    GetMem(pBuffer, iBuffLen);
    try
      SendMessage(aHandle, WM_GETTEXT, iBuffLen, LPARAM(pBuffer));
      Result := pBuffer;
    finally
      FreeMem(pBuffer);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetWinText(Handle));
end;

dutyfree 10. Apr 2009 13:41

Re: Napster aktuellen Track auslesen
 
Yeah Danke! geht..
einziges kleines problem, in der Function um das Handle zu bekommen, steht ja am Ende Showmessage bla bla und da gibt er das Handle aus, was sich in wndChild befindet. Wenn ich da jetzt einfach hinsetze label4.caption := inttostr(wndChild); geht das nicht, kommt ne Exception..

Meflin 10. Apr 2009 13:45

Re: Napster aktuellen Track auslesen
 
Is auch keien gute Idee, da eine Funktion keine Seiteneffekte haben sollte.

Wenn du das Handle im Programm anzeigen willst, dann mach das mit dem Wert, den dir der Funktionsaufruf zurückgibt, und nicht in der Funktion ;)

dutyfree 10. Apr 2009 13:51

Re: Napster aktuellen Track auslesen
 
Da haben wir ja das Problem ;)
Ich rufe die Function gar nicht auf, ich hab irgendwie nur den Code reinkopiert und die startet bei jedem Programmstart automatisch, deswegen musste ich die nicht aufrufen, weiss gar nicht wies geht, mich irritieren diese "HWND"'s.. :cry:
kannst du mir bitte ein beispiel aufruf für die function FindWindowEx2 mit Rückgabe der Handle machen? http://www.frank-und-tina-in-paris.d...ilie_danke.gif

DeddyH 10. Apr 2009 14:00

Re: Napster aktuellen Track auslesen
 
Du musst den ganzen Code doch nur noch richtig zusammensetzen.
Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  Dec(ChildNr);
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Break;
    Result := hChild;
  end;
end;


function GetWinText(aHandle: HWND): string;
var
  iBuffLen : Integer;
  pBuffer : PChar;
begin
  iBuffLen := SendMessage(aHandle, WM_GETTEXTLENGTH, 0, 0);
  if iBuffLen > 0 then begin
    Inc(iBuffLen);
    GetMem(pBuffer, iBuffLen);
    try
      SendMessage(aHandle, WM_GETTEXT, iBuffLen, LPARAM(pBuffer));
      Result := pBuffer;
    finally
      FreeMem(pBuffer);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('PPAppFrameClass','Napster');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'CUISplitterWindow', nil);
    wndChild := FindWindowEx(wndChild, 0, '#32770', nil);
    wndChild := FindWindowEx(wndChild, 0, 'CUIHorSplitterWindow', nil);
    wndChild := FindWindowEx(wndChild, 0, '#32770', nil);
    wndChild := FindWindowEx2(wndChild,'Static', 6);
    if wndChild <> 0 then
    begin
      ShowMessage(GetWinText(wndChild));
    end;
  end;
end;

dutyfree 10. Apr 2009 14:32

Re: Napster aktuellen Track auslesen
 
Vielen Dank! Eigentlich wäre jetzt alles geklärt, aber ich habe rausgefunden, dass wenn der auszulesende Namen irgendwelche Sonderzeichen hat, in meinem Falle war dies ein Fragezeichen oder so ein ' dann stürz das Programm ab.. Irgendeine Möglichkeit das zu umgehen?

dutyfree 10. Apr 2009 15:12

Re: Napster aktuellen Track auslesen
 
Irgendwie ist da was krank..
Spiele ich z.B. Pokerface von Lady Gaga ab klappt alles perfekt, hab den Interpret und Titel in meinem Proggi stehen, spiele ich danach Wrong von Depeche Mode kommt sofort eine Exception. Paar mal mit den beiden Liedern getestet, immer das gleiche. Beide haben kein einziges Sonderzeichen drin.
Just Dance von Lady Gaga geht au, aber Schwarz Zu Blau von Peter Fox wiederum nicht.. was ist da los?

mkinzler 10. Apr 2009 15:17

Re: Napster aktuellen Track auslesen
 
Was für eine Exception?

dutyfree 10. Apr 2009 16:16

Re: Napster aktuellen Track auslesen
 
Liste der Anhänge anzeigen (Anzahl: 4)
Es kommen sehr viele, bei manchen Liedern mehr bei anderen weniger, gerade bei einem beispiel song kamen erstmal so 4 stück irgendwann öffnete sich aber die FForm (hab immer auf fortführen geklickt) dann kammen nochmal so 3 oder 4 die konnte ich dann an die Seite ziehen und unten den Fehlermeldungen stand schön der Titelname, es funktioniert also aber irgendetwas ist da noch kaputt.. Hab das Projekt mal angehängt (paar posts unten)

Meflin 10. Apr 2009 16:18

Re: Napster aktuellen Track auslesen
 
Und dein Code sieht jetzt wie aus?

fkerber 10. Apr 2009 16:20

Re: Napster aktuellen Track auslesen
 
Hi!

Bitte hänge die Bilder an den Thread an, statt sie per [img] einzubinden.
Das zerstört dann das Layout nicht und verringert die Ladezeiten enorm.
Außerdem sind wir dann nicht von externen Servern abhängig.


Ciao, Frederic

dutyfree 10. Apr 2009 16:23

Re: Napster aktuellen Track auslesen
 
Ok sorry.. dachte das wäre so vielleicht leichter für euch
ach ja sry, ist ziemlich unsauber geproggt und das mit den buttons war jetzt auch erstmal so ne notlösung, aber das dürfte ja nicht das problem sein, wie gesagt, bei manchen liedern gehts bei anderen nciht obsohls bei den anderen ja auch iwie geht nur, dass dann noch unzählbare Fehlermeldungen dazukommen..

dutyfree 10. Apr 2009 18:35

Re: Napster aktuellen Track auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kann mir keiner helfen?
Eigentlich klappt es ja gibts ein Befehl um alle Fehlermeldungen zu unterdrücken oder so? Irgendwelche Zugriffsverletzungen die da kommen

Hier mal das Projekt bis jetzt Vielleicht findet einer den Fehler, ich nicht :(


Update. Etwas Überarbeitet. Download.


Nochmal kurz was mir so aufgefallen ist:

Bei einigen wenigen Liedern läuft es so wie es soll. Ich starte das Programm, Interpret und Titel stehen da. Schön. Tu ich ein anderes lied, wo ich vorher getestet habe ob es geht in die Playlist läuft alles wunderbar, das eine Lied geht zu Ende, die Namen ändern sich. Leider ist das mit 98% der Liedern nicht so, egal ob irgendwelche Sonerzeichen entahlten sind oder nicht. Ich starte sie. Fehler. Fehler. Fehler. Scheisse. Ich kann die Fehlermeldungen ganz oft wegklicken, irgendwann erkenne ich aber, dass die richtigen Daten doch angezeigt werden. Währendessen erscheinen aber immer weitere Warnungen. Erstelle ich eine Palaylist; Das erste Lied ist eins, wo ich sicher bin, dass es geht und das zweite eines wo es nicht geht.
Dann funktioniert es auch! Das erste Lied geht zu Ende, das nächste Startet und die Anzeigen ändern sich OHNE Fehlermeldungen. Starte ich dieses Zeite Lied aber Direkt, also besser gesagt, ich starte mein Programm währen dieses Lied läuft, dann gibt es wieder haufenweise Fehlermeldungen.
Der Fehler müsste also eigentlich in der Function GetWinText (Erste Seite, Beitrag 9) liegen. Obwohl diese ja eigentlich bei einigen Tracks ihre Arbeit sauber verrichtet. Ich habe es nochmal geschafft ein paar Fehlermeldungen einzudämmen. Es Funktioniert jetzt ansich ganz o.k. leider kommen aber oft noch Fehler bei einem Lied-Wechsel und ab und zu kommt ein Fehler "Ungültige Zeigeroperation"

fkerber 10. Apr 2009 18:44

Re: Napster aktuellen Track auslesen
 
Hi!

Das Pushen innerhalb von 24h ist hier nicht gerne gesehen (s. Kodex).
Desweiteren würde ich dich nochmal bitten, deinen Beitrag oben zu editieren und die Bilder anzuhängen!


Ciao, Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz