C# から iTunes COM Windows SDK を試す
参照設定で COM - iTunes Type Library を追加する。フォームにラベルを貼って、現在 iTunes で再生中のトラックの
アーティスト名 - 曲名 (アルバム名)
を表示するサンプル。
COM のため Marshal.ReleaseComObject で参照解除をしてあげないと、iTunes を終了するときに握っている旨のメッセージが表示されてしまう。次にサンプルは終了時に連動して終了するようにしている。
ラベルの書き換えは、別スレッドからの操作だから Invoke してやること。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using iTunesLib; namespace WindowsApplication1 { public partial class Form1 : Form { private iTunesApp itunes; public Form1() { InitializeComponent(); init(); } private void init() { itunes = new iTunesApp(); itunes.OnAboutToPromptUserToQuitEvent += new _IiTunesEvents_OnAboutToPromptUserToQuitEventEventHandler(itunes_OnAboutToPromptUserToQuitEvent); itunes.OnPlayerPlayEvent += new _IiTunesEvents_OnPlayerPlayEventEventHandler(itunes_OnPlayerPlayEvent); } private void unhock() { itunes.OnPlayerPlayEvent -= new _IiTunesEvents_OnPlayerPlayEventEventHandler(itunes_OnPlayerPlayEvent); itunes.OnAboutToPromptUserToQuitEvent -= new _IiTunesEvents_OnAboutToPromptUserToQuitEventEventHandler(itunes_OnAboutToPromptUserToQuitEvent); Marshal.ReleaseComObject(itunes); itunes = null; } void itunes_OnPlayerPlayEvent(object iTrack) { IITTrack track = itunes.CurrentTrack; if (track != null) { label1.Text = track.Artist + " - " + track.Name + " (" + track.Album + ")"; Marshal.ReleaseComObject(track); } } void itunes_OnAboutToPromptUserToQuitEvent() { unhock(); this.Invoke((System.Windows.Forms.MethodInvoker)delegate() { this.Close(); }); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (itunes != null) unhock(); } } }