![]() |
iTunes steuern mit iTunes Type Library
Hallo Leute!
Also ich möchte mit Delphi ein kleines Progrämmchen ( :-D ) schreiben, mit dem ich iTunes steuern kann. Ich habe das Programm schonmal mit VB programmiert und es hat einwandfrei funktioniert. Dazu habe ich die iTunesTypeLibrary verwendet. Aber dies mit Delphi zu realisieren ist da um einiges schwieriger. Ich habe in Delphi schon die iTunesTypeLibrary eingebunden. Dazu hab ich dann Beispiele gesucht.. aber irgendwie kommt jedesmal eine Fehlermeldung, wenn ich irgendwie auf iTunes zugreifen will oder so. Und nach stundenlangem durchforsten von google bin ich immer noch nicht schlauer als vorher. Kann mir da vielleicht jemand ein funktionierendes Beispiel geben. Ich habe Delphi 5. Danke im Vorraus. LG -iBooot |
Re: iTunes steuern mit iTunes Type Library
Zitat:
|
Re: iTunes steuern mit iTunes Type Library
Oh sorry hab ich vergessen :'D
Zitat:
Die einzelnen Versuche kann ich auch morgen nochmal posten, wenn ich die alle zusammengesucht finde. LG -iBooot |
Re: iTunes steuern mit iTunes Type Library
Poste doch mal den Quellcode. Der fehler deutet darauf hin das du dein Interface nicht angeforder hast (i.d. Art: MyInterface := CoMyInterface.Create)
|
Re: iTunes steuern mit iTunes Type Library
joa.. das wäre schonmal mein erster Fehler.
In keinem Beispiel, dass ich gefunden, war irgendetwas mit Interface zu sehen. Und ich weiß auch nicht wie das gehen soll und was das bringt.. :? Zu den Quelltexten.. Ich habe jetzt kein genauen Quelltext mehr, da ich durch viel rumprobieren den Quelltext ziemlich verunstaltet habe. Aber ich poste mal die Links zu den Beispielen: ![]() ![]() ![]() Doch jeder versuch führte zu dieser Fehlermeldung. Ich werde später nochmal einen richtigen Quelltext posten (ich setz mich jetzt dran). LG -iBot €dit:
Delphi-Quellcode:
Und im FormCreate:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, iTunesLib_TLB, StdCtrls;
Delphi-Quellcode:
2. Versuch:
var it: IITTrack;
begin label1.caption:=it.Get_Artist; end;
Delphi-Quellcode:
var iTunes: IiTunes;
begin label1.caption:=iTunes.CurrentTrack.name; end; |
Re: iTunes steuern mit iTunes Type Library
du mußt die INterfaces anfordern:
Delphi-Quellcode:
iTunes := CoiTunes.Create;
|
Re: iTunes steuern mit iTunes Type Library
Okay danke.
Ich habe das jetzt mal so versucht:
Delphi-Quellcode:
Aber sobald ich das Projekt starte, geht die Form gar nicht erst auf und iTunes wird automatisch in den Vordergrund geholt.
var iTunes: IiTunes;
begin iTunes := CoiTunesApp.create; showmessage(iTunes.CurrentTrack.Get_Album) end; Und nach einer gewissen Zeit geht die Fehlermeldung dann auch noch auf. Also ich weiß nicht mehr weiter. Ich hoffe ihr könnt mir jetzt helfen. LG -iBooot |
Re: iTunes steuern mit iTunes Type Library
[quote="iBooot"]Und nach einer gewissen Zeit geht die Fehlermeldung dann auch noch auf.
An welcher Zeile. Ist GetCurrentTrack evtl. nil? Kanns schlecht Testen das ich Apple-SW-Freien PC habe (Nachdem bei meinem iPod nach etwas über 1 Jahre der Akku nicht mehr mitspielt) |
Re: iTunes steuern mit iTunes Type Library
Der Fehler kommt wieder bei "showmessage(iTunes.CurrentTrack.Get_Album);".
Und wenn das Gleich nil wär, würde der mir das doch anzeigen oder? |
Re: iTunes steuern mit iTunes Type Library
Zitat:
Zitat:
|
Re: iTunes steuern mit iTunes Type Library
Achso okay.
Und was muss ich dafür ändern? Ich hab das nochmal ausprobiert: 1) iTunes geöffnet und Lied abspielen lassen 2) Quelltext:
Delphi-Quellcode:
3) getestet
var it: IiTunes;
begin it := CoiTunesApp.create; showmessage(it.CurrentTrack.Get_Album) end; iTunes wurde wie schon vorher in den Vordergrund geholt und die Form öffnete gar nicht erst. Das dauert dann etwa 20-30 Sekunden.. .. und dann kam aber eine andere Fehlermeldung (ist mir vorher vielleicht nicht aufgefallen , dass das eine andere ist): Zitat:
Wenn ich ok drücke und starte öffnet die Form und es passiert nichts weiter (die Message wurde nicht angezeigt). |
Re: iTunes steuern mit iTunes Type Library
Hi,
ich hatte da mal für mein Programm JoyToAny ne DLL geschrieben, die zwar nur play/pause, next track und previous track kann, aber vielleicht kann dir der code ja helfen: ![]() MfG |
Re: iTunes steuern mit iTunes Type Library
Ganz ehrlich.. ich kann damit gar nichs anfangen.. sry..
Gibt es hier keinen, der mir helfen kann? Irgendjemand muss doch schonmal mit Delphi auf iTunes zugegriffen haben ^^ LG -iBot |
Re: iTunes steuern mit iTunes Type Library
Da hast du aber Glück... genau so etwas habe ich heute erst für meine mIRC-DLL geschrieben :mrgreen:
Ich habe jetzt nicht so viel Zeit, das ganze auf "normales" Format umzuschreiben, aber entferne einfach die ganzen unnötigen Parameter; das Ergebnis landet hier in data. Ich weiss, da ist viel Copy&Paste drin, aber man kann ja nicht alles haben. :-D
Delphi-Quellcode:
unit Query;
interface uses ComObj, ComTool, SysUtils, Variants, Windows, iTunesLib_TLB; implementation function queryFile(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; ret : AnsiString; track : IITTrack; tkind : ITTrackKind; ftrack : IITFileOrCDTrack; utrack : IITURLTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin utrack := IDispatch(iTunes.CurrentTrack) as IITURLTrack; ret := AnsiString(utrack.URL); end else begin ftrack := track as IITFileOrCDTrack; ret := AnsiString(ftrack.Location); end; if (ret <> '') then begin StrCopy(data, PAnsiChar(ret)); Exit(3); end end; end; except end; StrCopy(data, 'n/a'); Result := 3; end; function queryType(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; name, uret : AnsiString; fret : PAnsiChar; track : IITTrack; tkind : ITTrackKind; ftrack : IITFileOrCDTrack; utrack : IITURLTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin utrack := IDispatch(iTunes.CurrentTrack) as IITURLTrack; name := AnsiString(utrack.URL); uret := Copy(name, 1, Pos(AnsiString('://'), name) - 1); StrCopy(data, PAnsiChar(uret)); Exit(3); end else if (tkind = ITTrackKindFile) or (tkind = ITTrackKindCD) then begin ftrack := track as IITFileOrCDTrack; name := AnsiString(ftrack.Location); fret := AnsiStrRScan(PAnsiChar(name), '.') + 1; StrCopy(data, fret); Exit(3); end; end; end; except end; StrCopy(data, 'n/a'); Result := 3; end; function queryTitle(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; name, interp : AnsiString; track : IITTrack; tkind : ITTrackKind; ftrack : IITFileOrCDTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin name := AnsiString(VarToStr(iTunes.CurrentStreamTitle)); StrCopy(data, PAnsiChar(name)); Exit(3); end else if (tkind = ITTrackKindFile) or (tkind = ITTrackKindCD) then begin ftrack := track as IITFileOrCDTrack; interp := AnsiString(ftrack.Artist); name := AnsiString(ftrack.name); StrCopy(data, PAnsiChar(interp)); StrCat(data, ' - '); StrCat(data, PAnsiChar(name)); Exit(3); end; end; end; except end; StrCopy(data, 'n/a'); Result := 3; end; function queryBitrate(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; track : IITTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; StrCopy(data, PAnsiChar(AnsiString(IntToStr(track.BitRate)))); Exit(3); end; end; except end; StrCopy(data, '-1'); Result := 3; end; function queryLength(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; track : IITTrack; tkind : ITTrackKind; ftrack : IITFileOrCDTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin StrCopy(data, '-1'); Exit(3); end else if (tkind = ITTrackKindFile) or (tkind = ITTrackKindCD) then begin ftrack := track as IITFileOrCDTrack; StrCopy(data, PAnsiChar(AnsiString(IntToStr(ftrack.Duration)))); Exit(3); end; end; end; except end; StrCopy(data, '-2'); Result := 3; end; function queryLengthF(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; track : IITTrack; tkind : ITTrackKind; ftrack : IITFileOrCDTrack; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin StrCopy(data, 'Stream'); Exit(3); end else if (tkind = ITTrackKindFile) or (tkind = ITTrackKindCD) then begin ftrack := track as IITFileOrCDTrack; StrCopy(data, PAnsiChar(AnsiString(ftrack.Time))); Exit(3); end; end; end; except end; StrCopy(data, 'n/a'); Result := 3; end; function queryPosition(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin StrCopy(data, PAnsiChar(AnsiString(IntToStr(iTunes.PlayerPosition)))); Exit(3); end; end; except end; StrCopy(data, '-2'); Result := 3; end; function queryPositionF(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing, b, m, s : integer; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin b := iTunes.PlayerPosition; s := b mod 60; m := b div 60; StrCopy(data, PAnsiChar(AnsiString(Format('%d:%02d', [m, s])))); Exit(3); end; end; except end; StrCopy(data, 'n/a'); Result := 3; end; function queryStatus(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin StrCopy(data, PAnsiChar(AnsiString(IntToStr(iTunes.PlayerState)))); Exit(3); end; except end; StrCopy(data, '-1'); Result := 3; end; function queryStatusF(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; state : ITPlayerState; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin state := iTunes.PlayerState; case state of ITPlayerStateStopped: StrCopy(data, 'Gestoppt'); ITPlayerStatePlaying: StrCopy(data, 'Laufend'); ITPlayerStateFastForward: StrCopy(data, 'Vorspulen'); ITPlayerStateRewind: StrCopy(data, 'Zurückspulen'); else StrCopy(data, 'Fehler'); end; Exit(3); end; except end; StrCopy(data, '-1'); Result := 3; end; function queryNum(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; playlist : IITPlaylist; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin playlist := IDispatch(iTunes.CurrentPlaylist) as IITPlaylist; StrCopy(data, PAnsiChar(AnsiString(IntToStr(playlist.Tracks.Count)))); Exit(3); end; end; except end; StrCopy(data, '-2'); Result := 3; end; function queryInfo(mWnd, aWnd: HWND; data, parms: PAnsiChar; show, nopause:boolean) : integer; stdcall; var iTunes : OleVariant; playing : integer; track : IITTrack; tkind : ITTrackKind; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin playing := iTunes.PlayerState; if playing > 0 then begin track := IDispatch(iTunes.CurrentTrack) as IITTrack; tkind := track.Kind; if tkind = ITTrackKindURL then begin StrCopy(data, '2'); Exit(3); end else if (tkind = ITTrackKindFile) or (tkind = ITTrackKindCD) then begin StrCopy(data, '1'); Exit(3); end else begin StrCopy(data, '3'); Exit(3); end; end; end else begin StrCopy(data, '0'); Exit(3); end; except end; StrCopy(data, '-1'); Result := 3; end; exports queryFile, queryType, queryTitle, queryBitrate, queryLength, queryLengthF, queryPosition, queryPositionF, queryStatus, queryStatusF, queryNum, queryInfo; end.
//EDIT: falls, nötig, hab ich auch noch Funktionen für Play, Pause etc... |
Re: iTunes steuern mit iTunes Type Library
Hier noch die Kontrollprozeduren, sogar nicht im mIRC-Format :mrgreen:
Delphi-Quellcode:
unit Control;
interface uses ComObj, Variants, Windows; implementation procedure play; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then begin iTunes.Play; end; except end; end; procedure pause; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then iTunes.Pause; except end; end; procedure prev; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then iTunes.PreviousTrack; except end; end; procedure next; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then iTunes.NextTrack; except end; end; procedure stop; var iTunes : OleVariant; begin try iTunes := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunes) then iTunes.Stop; except end; end; end. |
Re: iTunes steuern mit iTunes Type Library
Danke :thumb:
Das ist ja ein bischen viel Copy&Paste :lol: aber nja ich setz mich mal wieder dran (so in 2 wochen. ich fahr morgen in Urlaub :'D ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 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