Einzelnen Beitrag anzeigen

CorVu5

Registriert seit: 31. Dez 2007
26 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit der Steuerung von iTunes über das OLE-Objekt

  Alt 10. Apr 2009, 15:28
Hallo, ich schreibe grade aus Spaß an einem Plugin für das Programm Rainmeter.
Rainmeter dient dazu, nützliche (oder auch unnütze) Sachen auf deinem Desktop auszugeben.
Rainmeter ruft in einem Intervall von 2 Sekunden folgende Funktion auf:
Delphi-Quellcode:
function GetString(id : Uint; flags : Uint) : PWideChar; cdecl;
var
  str : String;
  wide : PWidechar;
begin
  If ProcessExists('ITUNES.EXE') Then Begin //kann nicht nach dem Fenster scannen, weil ich iTunes nur im Tray nutze
    try
      iTunesApp := CreateOleObject('iTunes.Application');
        if iTunesApp.PlayerState And (not VarIsNull(iTunesApp.CurrentTrack)) Then begin
          str := iTunesApp.CurrentTrack.Artist + #13#10 + iTunesApp.CurrentTrack.Name + #13#10 + iTunesApp.CurrentTrack.Album;
          wide := GetMemory(2048 * 2);
          StringToWideChar(str,wide,2048);
          result := wide;
        end else result := '<paused>';
      if not VarIsNull(iTunesApp) then iTunesApp := Unassigned;
    except
      result := '<not ready>';
    end;
  end else result := '<not running>';
end;
Unschwer zu erkennen, dass ich versuche den aktuellen iTunes-song auszulesen und zurückzugeben.
Das funktioniert auch soweit gut, ABER:
Wenn ich jetzt versuche iTunes zu beenden kommt erst die Meldung von wegen "Es ist was mit dem Scripting Interface verbunden, trotzdem beenden?".
Wenn ich jetzt "Ja" wähle startet iTunes kurz darauf erneut, wenn zwischen der Zeit in der iTunes sich heruterfährt aber der Prozess noch existent ist ein weiterer Aufruf der obigen Funktion liegt. Das liegt wohl daran, dass eine neue Ole-Instanz geöffnet wird und sich iTunes dadurch offenbar wieder öffnet.
Kurz gesagt, ich bräuchte eine Überprüfung an der ich erkennen kann, ob iTunes sich grade versucht zu beenden.
Es gibt zwar dafür ein Event (http://dot-totally.co.uk/software/it...Interface.html) namens onAboutToPromptUserToQuitEvent, leider habe ich wenig bis keine Ahnung von OLE und den dazugehörigen Events.

Kann mir ein erleuchteter Geist weiterhelfen?
danke im Voraus
CorVu5
Das Leben ist wie ein Strand...und dann stirbt man.
  Mit Zitat antworten Zitat