Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit der Steuerung von iTunes über das OLE-Objekt (https://www.delphipraxis.net/132344-problem-mit-der-steuerung-von-itunes-ueber-das-ole-objekt.html)

CorVu5 10. Apr 2009 14:28


Problem mit der Steuerung von iTunes über das OLE-Objekt
 
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

mkinzler 10. Apr 2009 14:38

Re: Problem mit der Steuerung von iTunes über das OLE-Objekt
 
Du erzeugst auch immer ein neues objekt, welches du nicht freigibst.

CorVu5 10. Apr 2009 14:44

Re: Problem mit der Steuerung von iTunes über das OLE-Objekt
 
Erstmal danke für die Antwort, aber soweit ich weiß (ich kann mich auch irren) zerstört man durch
Delphi-Quellcode:
iTunesApp := Unassigned;
das Objekt wieder.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 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