AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein iTunes steuern mit iTunes Type Library
Thema durchsuchen
Ansicht
Themen-Optionen

iTunes steuern mit iTunes Type Library

Ein Thema von iBooot · begonnen am 18. Jun 2009 · letzter Beitrag vom 2. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
iBooot

Registriert seit: 7. Jun 2009
10 Beiträge
 
#11

Re: iTunes steuern mit iTunes Type Library

  Alt 20. Jun 2009, 17:12
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:
var it: IiTunes;
begin
     it := CoiTunesApp.create;
     showmessage(it.CurrentTrack.Get_Album)
end;
3) getestet

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:
Im Projekt pTest.exe ist eine Exception der Klasse EOleSysError aufgetreten. Meldung: 'Starten des Servers Fehlgeschlagen'. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.
Bitte was? ^^

Wenn ich ok drücke und starte öffnet die Form und es passiert nichts weiter (die Message wurde nicht angezeigt).
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#12

Re: iTunes steuern mit iTunes Type Library

  Alt 23. Jun 2009, 08:52
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:

http://joytoany.svn.sourceforge.net/...=1&view=markup

MfG
  Mit Zitat antworten Zitat
iBooot

Registriert seit: 7. Jun 2009
10 Beiträge
 
#13

Re: iTunes steuern mit iTunes Type Library

  Alt 28. Jun 2009, 22:52
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
  Mit Zitat antworten Zitat
DSFreak

Registriert seit: 24. Apr 2008
9 Beiträge
 
#14

Re: iTunes steuern mit iTunes Type Library

  Alt 28. Jun 2009, 23:07
Da hast du aber Glück... genau so etwas habe ich heute erst für meine mIRC-DLL geschrieben
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.

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.
  • queryFile: Dateinamen inkl. Pfad bzw. Stream-URL
  • queryType: Dateiendung bzw. tream-Protokoll
  • queryTitle: aktuell gespielter Titel inkl. Interpret im Format "Interpret - Titel"
  • queryBitrate: Bitrate des aktuell gespielten Titel in kbit/s
  • queryLength: Länge des aktuell gespielten Titels in Sekunden
  • queryLengthF: Länge des aktuell gespielten Titels im Format mm:ss
  • queryPosition(F): das selbe nochmal für den Anteil des Songs, der schon gespielt wurde
  • queryStatus(F):
    Zitat:
    Enumeration values:
    ITPlayerStateStopped (0) Player is stopped.
    ITPlayerStatePlaying (1) Player is playing.
    ITPlayerStateFastForward (2) Player is fast forwarding.
    ITPlayerStateRewind (3) Player is rewinding.
  • queryNum: Anzahl der Titel in der aktuell gespielten Playlist
  • queryInfo: -1 = Fehler, 0 = iTunes nicht gefunden, 1 = Datei läuft, 2 = Stream läuft, 3 = etwas Unbekanntes läuft

//EDIT: falls, nötig, hab ich auch noch Funktionen für Play, Pause etc...
  Mit Zitat antworten Zitat
DSFreak

Registriert seit: 24. Apr 2008
9 Beiträge
 
#15

Re: iTunes steuern mit iTunes Type Library

  Alt 1. Jul 2009, 23:25
Hier noch die Kontrollprozeduren, sogar nicht im mIRC-Format

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.
  Mit Zitat antworten Zitat
iBooot

Registriert seit: 7. Jun 2009
10 Beiträge
 
#16

Re: iTunes steuern mit iTunes Type Library

  Alt 2. Jul 2009, 16:44
Danke
Das ist ja ein bischen viel Copy&Paste
aber nja
ich setz mich mal wieder dran (so in 2 wochen. ich fahr morgen in Urlaub :'D )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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