////////////////////////////////////////////////////////////////////////////////////////////////////// // Crative Commons License: http://creativecommons.org/licenses/by/2.0/ // Do whatever you like with the code, but I want credit (if you copy&paste, include these lines) // Or you could always modify it until I dont recognise it, thats cool with me :) // - Denis Lukianov ////////////////////////////////////////////////////////////////////////////////////////////////////// #include <string> ////////////////////////////////////////////////////////////////////////////////////////////////////// #include "iTunesCOMInterface.h" // Get this from the iTunes SDK // Remember to add "iTunesCOMInterface_i.c" to your project to avoid linker errors ////////////////////////////////////////////////////////////////////////////////////////////////////// std::string GetCurrentSongTitle_iTunes() { using std::string; using std::wstring; IiTunes *iITunes = 0; IITTrack *iITrack = 0; // String operations done in a wstring, then converted for return wstring wstrRet; string strRet; CoInitialize(0); try { HRESULT hRes; BSTR bstrURL = 0; // Create itunes interface hRes = ::CoCreateInstance(CLSID_iTunesApp, NULL, CLSCTX_LOCAL_SERVER, IID_IiTunes, (PVOID *)&iITunes); if(hRes == S_OK && iITunes) { ITPlayerState iIPlayerState; iITunes->get_CurrentTrack(&iITrack); iITunes->get_CurrentStreamURL((BSTR *)&bstrURL); if(iITrack) { BSTR bstrTrack = 0; iITrack->get_Name((BSTR *)&bstrTrack); // Add song title if(bstrTrack) wstrRet += bstrTrack; iITrack->Release(); } else { // Couldn't get track name } // Add url, if present if(bstrURL) { wstrRet += L" "; wstrRet += bstrURL; } iITunes->get_PlayerState(&iIPlayerState); // Add player state, if special switch(iIPlayerState) { case ITPlayerStatePlaying: default: break; case ITPlayerStateStopped: wstrRet += L" [stopped]"; break; case ITPlayerStateFastForward: wstrRet += L" [fast]"; break; case ITPlayerStateRewind: wstrRet += L" [rewind]"; break; } iITunes->Release(); } else { // iTunes interface not found/failed wstrRet = L""; } } catch(...) { try { if(iITunes) iITunes->Release(); if(iITrack) iITrack->Release(); } catch(...) { } } CoUninitialize(); // Convert the result from wstring to string size_t len = wstrRet.size(); strRet.resize(len); for(size_t i = 0; i < len; i++) strRet[i] = static_cast<char>(wstrRet[i]); return strRet; } //////////////////////////////////////////////////////////////////////////////////////////////////////