書類のアイコンを取得したかったのに

書類のアイコンを取得したいという話になった。元をただせば、Mac OS XのFinderに一覧印刷の機能がないので困るという相談をもちかけられたからだ。

Mac OS X 10.3の頃にそういうAppleScriptを書いたような記憶があるのだが、なぜかHDDの中に見つからない。いま10.4でなんとなくその場で書いて試してみても、Finderのウィンドウの印刷なんてなんともならないのであった。

Mac OS Xのスクリプトメニューには「Print Window」なんてスクリプトが添付されていて、こいつをメニューから呼び出すこともできるのだが、単にUnixレイヤーの「ls」コマンドを呼び出すだけ、というひじょーーに手抜きな構造になっているので使えない(-vオプションを付けても日本語ファイル名が化けることは防げない)。だいいち、UNIXコマンドの結果を一般ユーザーに見せるなんてナンセンスだ。

さらに、選択したウィンドウの内容をまるごとキャプチャして印刷するAppleScriptも作ってみたのだが……表示内容をそのままとってくるだけなので、縦長のウィンドウが相手だったりすると、表示エリア外のものは印刷されないのでいまひとつであった。

そこで、まーまじめに作るかシェアウェア(DiskCatalogMakerを見つけた)を使ってもらうかということで、とりあえず前者で努力してみることにした。

USのMLのログをひっくり返していろいろ調べ、方法自体は見つけた。普通のAppleScriptではなく、Xcode+Interface Builderの上でAppleScriptを書くAppleScript Studioの環境の上でだ。

方法はこんなかんじ。

 set iconImage to call method "iconForFile:" of (call method
"sharedWorkspace" of class "NSWorkspace") with parameter
"/Users/p/Desktop/Photo Library - 0715.tif"
 set image of image view "icon" of window 1 to iconImage

しかし……10.4でやってみてもうまく動かない。call methodコマンドの出力結果をダイレクトにファイルに落としてみたのだが、なんとなくエラー文字列らしきものが出力されているだけだ。なんとなく、パスの受け渡しで失敗している雰囲気である。

ファイルのパスを定数で与えても、Unicode textにキャストしても、結果は改善されない。

ML上のやりとり自体は2003年に行われていたものだったので、これはどうやら10.3環境を前提とした話らしい。

こういう場合には、そのままMLに質問を投げてみるほかない。やってもダメなんだから「ダメ」という情報を投げることに価値がある。

ここのところ、迷える子羊たちにML上でいろいろと助言していたので、たまには自分も助けてもらえると嬉しいのだが、、、(^ー^;;;;

後日談:
早速解決方法がもたらされた。むむっ! それもんのObjective-Cのファイルを作って足してあげないといけなかったのか………

Photoshopの異なるバージョンをサポートするScriptの書き方についての質問にていねいに答えてあげたら、大変感謝された。また、Photoshop CS3ではCS2の時に見られた(1年前に報告した)バグがそのまま残っているとかで……やっぱり、所詮Adobeなんだなぁ……と思った次第。

Copyright By Piyomaru Software. All Rights Reserved