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.