use strict; use Win32::OLE; use Tk; use Tk::JPEG; my $iTunes_OLE; my $tkWin; my $tkPhoto; my $tmpFile = 'C:\image.jpg'; sub cleanup { undef $iTunes_OLE; Win32::OLE->FreeUnusedLibraries(); exit(0); }; use sigtrap 'handler' => \&cleanup, 'INT'; sub iTunesEvent { my ($iTunes, $event, @args) = @_; my $currTrack = $iTunes->CurrentTrack; if ( defined($currTrack) && ($event eq 'OnPlayerPlayEvent') && ($currTrack->Artwork->Count > 0) ) { # Save the artwork from ID3 tag to a temp file. my $coverArt = $currTrack->Artwork->Item(1); $coverArt->SaveArtworkToFile($tmpFile); my $tmpPhoto = $tkWin->Photo('img', -file => $tmpFile); $tkPhoto->destroy; $tkPhoto = $tkWin->Label(-image => $tmpPhoto)->pack; } } $tkWin = MainWindow->new; $tkWin->title("iTunes Artwork"); $tkPhoto = $tkWin->Label(-text => "Play some music!")->pack; Win32::OLE->Initialize(Win32::OLE::COINIT_OLEINITIALIZE); $iTunes_OLE = Win32::OLE->new("iTunes.Application") or die $!; Win32::OLE->WithEvents($iTunes_OLE, \&iTunesEvent); $tkWin->waitVariable(\$iTunes_OLE); MainLoop; Win32::OLE->MessageLoop(); cleanup;