Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   iTunes steuern mit iTunes Type Library (https://www.delphipraxis.net/135849-itunes-steuern-mit-itunes-type-library.html)

iBooot 20. Jun 2009 16:12

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:
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).

Hybrid666 23. Jun 2009 07:52

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:

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

MfG

iBooot 28. Jun 2009 21:52

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

DSFreak 28. Jun 2009 22:07

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.
  • 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...

DSFreak 1. Jul 2009 22:25

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.

iBooot 2. Jul 2009 15:44

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 12:43 Uhr.
Seite 2 von 2     12   

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