2020-02-28T10:35:35+09:00
System Event を使わないで キータイプ する AppleScript
macOS 10.14 Mojave から、あるアプリケーションから別のアプリケーションに Apple Event を送る際に、最初の1回はダイアログが開かれて承認を求められるようになりました。これがうっとうしい。最初の一回ぐらい、いいじゃないかと思うかもしれないけど、スクリプトを編集するたびに承認がリセットされるんです。使うだけなら、最初の一回だけかもしれないけど、開発している時は毎回承認が求められることになり、とてもうっとうしい。
というわけで、JavaScript for Automation (JXA) を使って、AppleScript からは実行できない C 言語の API を呼び出して、Apple Event の送信を回避しようという話です。
一般にアプリケーションのコントロールには、キータイプのエミュレーションは不確実なので避けるべきですが、他に手段がない場合もありますね。例えば、アプリケーションを選ばす文字列を入力する方法として、
という方法が考えられます。
AppleScript からキータイプをエミューレートする正規の方法は、アプリケーション System Events を使う(Apple Event を送信する)方法ですね。同等のことを、JXA から CoreGraphics の API を呼び出して、行います。次のスクリプトは Command + V をエミュレートしています。他のキータイプに変更するには、KVK_ANSI_V とか KCGEventFlagMaskCommand というところを変えていただければ良いです。
なお、このスクリプトの実行には、GUI Scripting が利用可能になっている必要があります。先日紹介した、GUI Scirpting をチェックするスクリプトと合わせて利用してください。
以下のスクリプトは不完全なので、「System Event を使わないで キータイプ する AppleScript の修正版」を参照してください。