Google Deskbar API の例にあった、"HDD から曲を検索して再生" ってのをやってみようと C# でちょろっとコードを書いてみる。
using System;
using Google.Desktop;
using iTunesLib;
public class iTunesSearch : ICustomSearch {
public string Title() { return "iTunes"; }
public OutputType GetOutputType() { return OutputType.kDeskbar; }
public string Run(string query, OutputType browser_type) {
IiTunes iTunesApp = new iTunesAppClass();
IITLibraryPlaylist playlist = iTunesApp.LibraryPlaylist;
IITTrackCollection tracks = playlist.Search(query, ITPlaylistSearchField.ITPlaylistSearchFieldAll);
if (tracks.Count > 0) {
// IITTrack track = tracks.Item(1);
IITTrack track = tracks.get_ItemByPlayOrder(1);
track.Play();
return track.Name;
} else {
return "No tunes found for " + query;
}
}
}
なぜか IITTrackCollection.Item が未定義というエラーになるのはおいておいて、これ dll つくって Deskbar から呼び出すと、ただの "error" になってしまうんですなぁ。コマンドラインからだと動くんだけども。COM のセキュリティとかかなぁ。しかし SDK の samples にあった PassGen.c も同様に "error" になったのでほかの問題かも。デバッグ困難です。 → iTunesWrapper.dll を Plugins ディレクトリにおいたら動いたっぽい。
ちなみに iTunes COM を C# から使うには iTunes.exe の Typelib をインポートして reference に追加する必要あり(VisualStduio だとツールでできるらし)。フリーの Microsoft SDK でやるには、以下のように。
% tlbimp "c:\program files\iTunes\ITunes.exe" /out:iTunesWrapper.dll /namespace:iTunesLib % csc /target:libarary /out:iTunes.dll /r:deskbarex.dll /r:iTunesWrapper.dll iTunes.cs