iTunes-Track herausfinden
Hi,
ganz so einfach, wie der Titel es scheinen lässt, ist es auch wieder nicht. ;) Ich versuche gerade ein wenig mit der iTunes-COM-API herumzuspielen. Soweit funktioniert das auch ganz akzeptabel, aber es hakt bei einer Sache: In einem Event erhalte ich als Parameter eine ID eines Tracks in Form eines OleVariants. Darüber ist es irgendwie Möglichkeit eine Variable vom Typ IITTrack zu erhalten. Da ich das nicht so ganz kapiert habe, habe ich mal gesucht und im CodeProject auch was gefunden. Dort steht für C#:
Code:
Ich hab's ausprobiert: das funktioniert wirklich.
protected void myiTunes_OnPlayerPlayEvent(object iTrack)
{ string myArtist, myName; IITTrack myTrack = (IITTrack) iTrack; myArtist = myTrack.Artist; myName = myTrack.Name; } Also dachte ich mir, dass es unter Delphi ja fast genauso gehen könnte:
Delphi-Quellcode:
Doch leider funktioniert das nicht mit dem Fehler
procedure TEventHandler.OnPlayerPlayEvent(Sender: TObject; iTrack: OleVariant);
var Track: IITTrack; begin {Einen Track aus iTunes Anhand der ID finden} Track := IITTrack(iTrack); {Zeile 54} // ... end; Fehlermeldung: [Fehler] uITunes.pas(54): E2089 Ungültige Typumwandlung Hat jemand eine zündende dafür? :? Chris |
Re: iTunes-Track herausfinden
Delphi-Quellcode:
procedure TEventHandler.OnPlayerPlayEvent(Sender: TObject; iTrack: OleVariant);
var Track: IITTrack; begin // kleine Sicherheitsüberprüfung Assert(VarType(iTrack) = varDispatch); // umwandeln Track := IDispatch(iTrack) as IITTrack; |
Re: iTunes-Track herausfinden
Hi,
yeah, danke dir! :thumb: Scheint zu funktionieren. :) Chris |
Re: iTunes-Track herausfinden
Kannst du bitte mal den gesamten Quellcode posten, denn ich habe das Problem, dass ich nicht verstehe, wie man die Ereignisse von iTunes implementieren muss.
|
Re: iTunes-Track herausfinden
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
guck dir mal diesen Thread an. Mit dem verlinkten Tool (EventSinkImp) kannst du dir eine Unit erstellen, die alle Events so wrappt, dass du sie einfacher verwenden kannst. Wenn du dann die Typenbibliothek und die neue Unit in deine Uses eingefügt hast, kannst du dir die Unit im Anhang ansehen (!). Direktes Weiterverwenden der Unit untersagt. Chris |
Re: iTunes-Track herausfinden
Ich glaub, dass das bei mir nich geht. Ich hab nur die Personal-Version von Delphi, und da gibt es das Tool TLibImp.exe anscheinend nicht, von dem EventSinkImp wird es aber benötigt. Das heißt, es klappt nicht. Könntest du mir bitte den von EventSinkImp erzeugten Quelltext geben?
|
Re: iTunes-Track herausfinden
Zitat:
gruß shockrocker |
Re: iTunes-Track herausfinden
Ich wüsste auch gerne, wie ich diese Events einbinde...
Alle meine Versuche waren atm. ohne Erfolg.... Hat nicht jemand einen Codeschnipsel ????? |
Re: iTunes-Track herausfinden
Zitat:
In dem verlinkten Thread ist ein Code-Schnipsel + ein Tool gepostet worden. Damit funktioniert es im Normalfall. Und wenn es trotz Tool nicht funktionieren sollte, wäre ein Formulierung dementsprechend sinnvoll, anstatt zu sagen "geht nicht" ("geht trotz tool nicht" wäre ja schonmal ganz nützlich). Chris |
Re: iTunes-Track herausfinden
Hallo Chakotay,
Zitat:
Und TROTZDEM kommen keine Events an !!! Ich habe iTunes 7.0.1.8. Die Steuerung klappt einwandfrei, aber eben keine Events... Und meine Frage war auch simpel, ich fragte ja nicht nach einem Codeschnipsel für Jabber :mrgreen: , sondern für iTunes... Danke für deine Mühen, ich habe alle Threads hier gelesen und auch entsprechendes getestet, nur funzt es nicht, ich weiss atm. nicht wieso. Und ich programmiere seit über 10 Jahren Pascal/Delphi, von daher will ich mal sagen, das ich schon weiss, was ich gemacht habe. Leider muss ich gestehen COM ist momentan Neuland... |
Re: iTunes-Track herausfinden
So hier habe ich mein Testsource mal angehängt:
Delphi-Quellcode:
Und das Event kommt nicht ????? Ich weiss wirklich nicht, was hier falsch sein sollte....
unit MainForm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, iTunesLib_TLB, iTunesLibEvents, ExtCtrls, StdCtrls; type TfrmMain = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure TrackChangedEvent(Sender: TObject; iTrack: OleVariant); private iTunesApp: IiTunes; EventManager: TiTunesLibIiTunesEvents; public end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.FormCreate(Sender: TObject); begin iTunesApp := COiTunesApp.Create; EventManager := TiTunesLibIiTunesEvents.Create(Self); EventManager.OnPlayerPlayingTrackChangedEvent := TrackChangedEvent; EventManager.Connect(iTunesApp); end; procedure TfrmMain.TrackChangedEvent(Sender: TObject; iTrack: OleVariant); var Track: IITTrack; begin Assert(VarType(iTrack) = varDispatch); Track := IDispatch(iTrack) as IITTrack; Label1.Caption := Track.Album; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin EventManager.Disconnect; FreeAndNil(EventManager); // iTunesApp.Quit; iTunesApp := nil; end; end. |
Re: iTunes-Track herausfinden
Hi,
da ich im Moment nur eine Turbo-Version hab, mit der ich keine Typbibliothek einbinden kann, müsste ich erstmal raten: ich vermute mal, dass du erst connecten musst, um dann das Ereignis zuzuweisen... Chris |
Re: iTunes-Track herausfinden
Hi,
erst Connect und dann das Ereignis initiieren habe ich auch schon gemacht... Ich benutze ja auch Turbo-Delphi... Units kannst du ja einbinden und dann create() etc... Naja ich brauche das ja nicht dringend, ist nur um mich in das Thema einzuarbeiten. Wollte ein kleines Tool, like MyFairTunes basteln, jedoch mit vielen kleinen Tools, wie z.B. alle Tracks ohne Artwork anzeigen etc.... Ich denke irgendwann finde ich einen weg für die Events... Danke erst mal, würde mich freuen, wenn jemand einen guten Tip hat. Sollte ich vorher was finden, werde ich es hier Posten... |
Re: iTunes-Track herausfinden
Ahoi... sorry für die späte Antwort, aber ich hatte den Thread überhaupt nicht gesehen. Für die Akten: In der erwähnten iTunes-Version gehen Events gar nicht, muss wohl ein Bug gewesen sein. Das war aber nicht der einzige Bug :) Ich hab zu der Zeit an einem Projekt gearbeitet wo es unter anderem auch um die Interaktion mit iTunes ging - ich habe mir tagelang die Haare gerauft bis ich dann letzten Endes in langen Debuggingsessions rausgefunden hatte, dass iTunes 7.0.0.18 da gar keine Events sendet. Das war besonders übel weil ich einen Releasetermin zu halten hatte und an dem Problem gar nichts machen konnte. Inzwischen sollte das aber behoben sein, wenn ich mich recht entsinne erschien dann irgendwann ne neuere Version in der es wieder ging...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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