3.11 20:30 【続々AppleScriptのサポート】 set、close、saveまでサポートできたということで1.00b6リリース。magnificationプロパティをウィンドウクラスに追加するのがどうやってもうまくいかなかったのだが、試しにMacを再起動して試してみたらあっさり成功。Macを再起動しなくても、スクリプト編集プログラムを一度終了させてやればうまくいく場合もあるみたい。'aete'リソースをいじった場合には終了してやる方がいいのかも知れないな。ま、煮詰まった時は一度頭を冷やすために再起動してみるのもいいかなと思いつつ。 Object Specifierを分析するルーチンを一度書いてしまえば、あとは楽なもんだった。setは指定されたプロパティを調べるところまではgetと同じであとは設定する値をデスクリプタから持ってくるだけだからAEGetParamDescのあとAECoerceDescで終わり。データのタイプが決まっているならAEGetParamPtrでいけそうな気がする。このあたりのルーチンっていろいろあってなにがなんだかよくわからなくなりそうだけど、いろいろ用意してあるってだけだからその場で使いやすいものを使えばいいだけみたい。一度デスクリプタにしておく方が使いやすければ(データの種類を気にしなくていいから便利)そうすればいいし、単にデータを取り出したいだけならそうすればいいと。 saveは「save <reference> [in <file>] [as <type>]」という感じにしたのでちょっと複雑かなと思ったのだけど、それぞれのキーを使ってこれまたAEGetParamPtrでデータを取り出して処理していくだけ。パラメータが省略された時の処理をどうしたらいいのか思いつかなかったので取り出そうとした時にエラーが起こったら省略されたと判断することにしてみた。まあ問題なく動いてくれるみたいなのでおそらくokかな。あ、ドキュメントに書き忘れたけど、in <file>で保存ファイルを指定した場合にもしファイルがすでに存在する場合は警告なしに上書きされる。上書きを許可するかどうか設定できるようにするのが理想だけど、ファイルがあった場合にどうエラーを返したらいいのかが難しくて。。 もう少し使用できるコマンドを増やしたいなとは思いつつ、なんとかファイルを開いて内容をいじって保存するという一通りのことはできるようになった。スクリプトをがんばって書けばドロップされたイメージのサイズをそろえてJPEG 60%で名前を変えて保存しなおすなんてことが簡単にできるようになる。次のバージョンではもう少しコマンドを増やして(QuickTimeのエフェクトに関してはどうするかな……)、サンプルスクリプトもいくつか収録できるといいな。 なんかものすごく難しいものだと思っていたAppleScriptサポートも、やってみれば意外となんとかなるものだった。オブジェクトが多くなると分析ルーチンが複雑になっていくけど、コンテナからトークン(で、いいんだっけ?)を取り出すルーチンを1つ1つ組み合わせていくだけだから順々にやっていけばできてくるし。一度にいろいろやろうと思うと混乱してしまうけど細かいルーチンを順番に作っていくだけなら難しくない。通してデバッグする時がちょと大変だけど(笑)。 実装の作業はかなり地道で渋いものだけど、ちゃんと動いた時の感動はかなり大きなものがある。最初にアプリケーションにnameプロパティを設定してそれを取りだせた時もうれしかったけど、set命令でイメージサイズや画質を変更できた時はなんとも言えず「おおお」と。声をあげるような感動ではなくてなんとなく「じーん」とうれしいというか。 QT-Qが形になったら他のソフトもAppleScript対応にしてみるのもいいかもしれないな。自動化して便利になりそうなソフトってうちにはあんまりなさそうな気もするけど、IconPartyもAppleScriptである程度制御できるようになればなにか新しい可能性が見えてくるかも知れないし。 それから「記録」もなんとかサポートしたいなぁ。方法がさっぱりわからないんだけどどうやるのかな(笑)。たぶん記録する操作をした時に直接アプリケーション内で動かしてしまうのではなくて「自分自身にイベントを送る」というふうにするんだろうけどそのへんはサンプルを見てそのあたりのことを解説しているドキュメントを探さないといけないかな。もうひとつの目標は「アプレット/ドロップレットの書き出し」だけどこれについてはさっぱりわかんない。記録可能ってのと関係しているような気はするんだけど。 ここしばらく全然役に立ちそうにない話題ばかりになってしまったのでそろそろなにか役に立ちそうなことを書いてみたいなぁ。せっかくだからAppleScript関係のプログラムのことを書いてみたいけど、かなり長いのとぼくも完璧に理解しているわけではないってのがつらいところ。軽くQT-Qでサポートしているコマンドを使ったスクリプトの話でもいいかなと思いつつ。あるいはRezなどを使って'aete'を作る方法とか? |