November 24, 2004

Google Deskbar で iTunes 検索

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
Posted by miyagawa at November 24, 2004 04:21 AM | Permalink | Comments (0) | TrackBack(0)
Comments
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/1406
Post a comment