[misc][in Japanese] iTunes COM SDKをJScriptで使う方法

ディスクを増設して、iTunesに登録していた音楽ファイルを移動したら、iTunesから認識されなくなった。iTunesから全削除して、再登録するのが王道らしいが、それだと再生回数や最終再生日時といった情報が消えてしまうのがちょっと困る。

なんとかならないかと調べたら、iTunesの各種機能を自作プログラムから呼び出すことができるらしい。というわけで、iTunes COM for Windows SDKなるものをダウンロードしていじってみた。WSH,JScript,COMオブジェクト、といった環境を使うのは初めてだったので、iTunes COM SDKを使うために自分が仕入れた知識をメモしておく。

  • iTunes COM SDKの中に入っているサンプルスクリプトは、JScriptで書かれている。
  • JScriptは、WSH(Windows Script Host)という実行環境で実行可能。
  • スクリプトWSHで実行したい場合は、wscript HOGE.js (GUIベース)または、cscript HOGE.js(コマンドラインベース)を、実行すればよい。自分は、cygwinから、cscriptを実行してみたが特に問題なく実行できるようである。
  • 同梱のヘッダファイルは、IDLファイルと呼ばれるインタフェース記述専用言語で書かれている(といっても、ほとんどCのヘッダファイル)。
  • 引数についているin,out,retvalなどの修飾子のうち"retval"というのは、「戻り値を直接扱わない言語からの呼び出し時にこの引数が戻り値になる」という意味。JScriptはこれに該当する。HRESULTな戻り値にアクセスする方法は見つからなかった。

なお、COMインタフェースの記述は、IDLという専用の記述言語(といっても、ほとんどCのヘッダファイルだが…)で行われている。また、WSHは、Windows Powershellに移行されているようで、今後は更新されないらしい。

これでやっといじれるようになったので、あれこれ試してみたが、iTunes COMオブジェクト経由では、デッドリンクになっているファイルのパスは取れないらしい。iTunesからは見られるのに…。COMオブジェクト経由だと、ご丁寧に、ファイルの実体の存在確認をしてからパスを返す模様。

また、プレイリストにAddTrackしようとしても、デッドリンクになっているトラックはAddTrackされない。これも、iTunes上で手動では可能なのに…。

参考にした主なサイトは以下の通り。