AppleScriptは敗北か!?
clippyを公開したら思いのほかダウンロードしてくれた人が多くて、ビックリしました。自分としては、ホットキーが固定であること・自動ペーストができないという中途半端な状態でのアップだったので恐れ入るばかりです。とりあえず、この2つのうち自動ペーストについて現在アップデート中です。
当初は、NSEventを作ってfirstResponderに投げてやればなんとかなるのではと、タカを括っていたのですがうまくいかず挫折。当たり前といえば当たり前ですが、アプリケーションを越えてメッセージは投げてくれないようです。そのほかにもいくつか試してはみたもののことごとくうまくいかないのでとうとう禁断のApplescriptを使うことに。CocoaアプリでApplescriptを使うのは敗北感満々なんですが、まぁ原理主義はドブに捨てて欲しい機能が実現できるならそれでいいかというのが僕の考え。(Mail機能ではScriptingBridgeだって使っているわけで今更ですが...)
で、導入したのはappscriptというApplescriptのフレームワーク。Objective-Cの実装でApplescriptを呼び出せるというスグレモノです。
NSDictionary* activeApp = [[NSWorkspace sharedWorkspace] activeApplication];
SEApplication *systemEvents = [[SEApplication alloc] initWithName:@"System Events"];
SEReference *ref = [[systemEvents processes]
byName:[activeApp valueForKey:@"NSApplicationName"]];
SEKeystrokeCommand *cmd = [[ref keystroke: @"v"] using: [SEConstant commandDown]];
[cmd send];
[systemEvents release];単に、システムイベントクラスを作成してフロントのアプリケーションに対してCmd+Vを送っているだけですがちゃんと動作します。もちろん、最前面のアプリケーションがCmd+V以外でペースト機能を実装している場合はダメなんですがそういうアプリに出会ったことないし。SEApplicationクラスはappscriptフレームワークのためのglueクラスです。これは、スクリプトで制御したいアプリケーション毎に作成する必要があるのですがそのためのツールももちろん付属します。
今日は肺炎による入院明けで身体がしんどいので詳しい手順とアップデート版をアップするつもりです。はぁぁシンド.....










Comments
こちらこそ、はじめまして。すばらしい、情報をありがとうございます。
といっても、blogのほうは時々拝見してました。clippyの開発過程でclipMenuを知り、clippyを作るのは止めようかと思ったくらいです。
自動ペーストは結構悩みました。かなりいろんな方法でトライしたのですがすべて惨敗で結局appscript frameworkに落ち着きました。ご紹介頂いた記事は知りませんでした。先にこちらを知っていたらこっちにしたかもしれませんね。appscript frameworkは初回がちょっと遅いので一度比較してみようかと思います。
ホットキー設定については、PTHotKeysを導入予定で下調べ済みでしたがまだまったく手つかず状態です。
いづれにせよ、Cocoa開発における日本語情報量は極端に少ない状況ですので非常に助かります。私もできる限り知り得た情報を公開していくよう心がけていきますので今後とも情報交換していただければ非常にうれしいです。
体調までお気遣い頂き、本当にありがとうございます。
はじめまして。
自分も、ClipMenuというソフトを作成しているので、クリップボード・ユーティリティには興味津々です。
もう解決済みかもしれませんが、実装を予定されている機能について、ご参考になればと思い、コメントさせていただきます。
* 自動ペースト
ClipMenuでは、メーリングリストで紹介されていた方法を使わせてもらっています。調べた限りでは、Command+Vをつくる以外の良い方法は見つかりませんでした。
http://www.cocoabuilder.com/archive/message/cocoa/2001/12/18/49321
* ホットキーの設定
これまではPTHotKeysを使わせてもらっていましたが、先日、Shortcut Recorderフレームワークに変更しました。グローバルホットキーの実現にはPTHotKeysが使われていますが、ショートカット設定のための専用Controlが付属しています。Adiumなどに採用実績があります。
Shortcut Recorder:
http://code.google.com/p/shortcutrecorder/
PTHotKeysの日本語解説:
http://homepage3.nifty.com/kimuraw/misc/hotkeyslib3.html
mkinoさんのCarbonEventの解説も勉強になりました:
http://hmdt.jp/cocoaProg/Carbon/CarbonEvent/CarbonEvent.html
以上、何かのお役に立てば幸いです。
入院されていたとのことですから、どうかご自愛ください。