C# から iTunes COM Windows SDK を試す

June 11, 2007

参照設定で 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();
}
}
}

C# iTunes

tilfin freelance software engineer