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();
    }
  }
}