Bevor ich hier lang rumerzähl, einfach mal bisschen Code
Delphi-Quellcode:
function iTunesRunning:boolean;
begin
if(FindWindow('iTunes',nil)=0) then Result:=false
else Result:=true;
end;
function CurrentTrack:TTrack;
var iTunesApp, iTunesCurrentTrack: OLEVariant;
begin
iTunesApp:=CreateOleObject('iTunes.Application');
if not VarIsNull(iTunesApp) then begin
iTunesCurrentTrack:=iTunesApp.CurrentTrack;
if not VarIsNull(iTunesCurrentTrack) then begin
Result.Artist:=iTunesCurrentTrack.Artist;
Result.Album:=iTunesCurrentTrack.Album;
Result.Song:=iTunesCurrentTrack.Name;
if not VarIsNull(iTunesApp) then iTunesApp:=Unassigned;
end;
end;
end;
Im OnCreate der Form:
Delphi-Quellcode:
if not iTunesRunning
then begin
MessageBox(
Handle,'
Start iTunes first...','
Error',MB_OK
or 16);
Application.Terminate;
end;
Timer1Timer(Sender);
Und noch der Timer:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not iTunesRunning then begin
//wiedergabe gestoppt an server senden, kein problem
Application.Terminate;
end;
LastTrack:=CurTrack;
CurTrack:=CurrentTrack;
if (CurTrack.Artist='') and (CurTrack.Album='') and (CurTrack.Song='') then begin
//wiedergabe gestoppt senden
close;
end;
// wenn nötig, TrayIcon-Hint anpassen und daten an server senden, das ist aber kein problem...
end;
Nun zu meinem Problem:
Ist iTunes nicht am Laufen, so kommt die entsprechende Meldung. Danach aber wird es gestartet und es kommt eine
Access Violation, obwohl ich nach der Überprüfung, ob denn iTunes läuft, Application.Terminate aufrufe!
Wieso wird das Programm da einfach weiter ausgeführt?
Und wie stelle ich fest, ob die Wiedergabe pausiert wurde? Wenn ich nämlich etwas abspiele und auf Pause stelle, so meint mein Programm immer noch, ich würde hören - logisch, der pausierte Song ist ja auch der CurrentTrack ^^, aber ich hör eben nicht...
MfG Z4ppy
PS.: Ich hab noch ein anderes Problem mit iTunes, siehe
hier ^^