スクリプト非対応アプリケーションのスクリプティング

「人間の行動を真似る」編

1997.2.12


 AppleScriptは、メニュー選択やマウス操作、キー入力などをサポートしていません。従って、スクリプティングに対応していないアプリケーションをスクリプトから利用するには、それらを扱うためのソフトウェアが別途必要になります。現在もっとも一般的に使用されているのは「PreFab Player」ですが、それ以外にもいくつかのOSAXやユーティリティーが利用できます。

 ここでは、スクリプト非対応アプリケーションを操作する際の一般的な注意点について述べます。



データの受け渡し

 まず、スクリプトとアプリケーションの間でデータを受け渡す方法を考えます。

 非対応アプリケーションは内部的なデータをスクリプトとやりとりすることができません。従ってデータの受け渡しは、少々間接的な方法を採る必要があります。

 最も簡単な方法は「クリップボードを経由する方法」です。 AppleScriptは本来クリップボードを扱うことができませんが、「KeyQuencer」「Jon's Commands」「Tanaka's osax」などを用いることによってクリップボードを経由したデータ処理が可能となります。

 例えばテキストをクリップボードに格納する場合、 Jon's Commandsでは次のように記述します。

  set the clipboard to "sample text"

 クリップボードに格納されたデータを非対応アプリケーションで使用する場合は、そのアプリケーションをアクティブにした後「ペースト」を実行することになります。

 逆の場合は「コピー」してからスクリプト側で「get the clipboard」とすればいいでしょう。

 テキスト以外のデータも、この方法で扱うことができます。


キー入力

 文字列を入力するためにキータイプをスクリプトで実行するのは、あまりいい方法とはいえません。日本語環境では「インプット・メソッド (IM)」の関係で、単純にキー入力を行っても望んだ結果が得られないからです。 IMの状態を知るのは困難ですので、スクリプトの安定した動作を期待するならクリップボード経由のテキスト入力を行った方が無難です。

 スクリプトからキータイプをシミュレートするのは、メニュー選択のためのショートカットとダイアログの「OK」「キャンセル」の選択に限定するべきだと思います。


メニュー選択

 メニューを選択するためには、いくつか方法があります。

 まず、選択したいメニューの項目名を文字列で指定する方法です。例えば「PreFab Player」では次のように記述します。

  tell application "PreFab Player"
    do menu menu item "新規..." of menu "ファイル"
  end tell

 この方法の利点は、視覚的にどのメニューのどの項目を選択するのかがはっきり分かるということです。欠点としては、同じアプリケーションでも英語版と日本語版ではメニューや項目名が異なること、項目名を間違えやすいこと、毎回書くのが面倒なことが挙げられます。

 次に、選択したいメニュー項目を数値で表現する方法があります。

  tell application "PreFab Player"
    do menu menu item 1 of menu 2
  end tell

 この方法の利点は、記述が楽であること、日本語版と英語版の区別をしなくていいこと、間違えにくいことがあります。欠点としては、どの項目を選択するのか分かりにくいということがあります。

 最後に、キーボードショートカットを使用する方法があります。

  tell application "PreFab Player"
    type "n" holding command
  end tell

 この方法の利点は、ユーザが日頃使い慣れているショートカットをそのまま利用できることからスクリプトの記述が非常に楽になること、日本語版と英語版の区別をしなくていいこと。逆に欠点は、ショートカットの設定されていないメニュー項目を選択できないことが挙げられます。

 どの方法も一長一短なので、その時々で使い分けるといいでしょう。


ボタンのプッシュ

 ボタンを押すためには、いくつかの方法があります。

 まず、直接ボタンの番号を指定して押す方法。この方法ではボタン番号を毎回調べる必要があるのですが、 PreFab Playerはこの問題にうまく対処できません。 KeyQuencer等を用いてボタンのIDを取得し、それをPreFab用に変換するという手間が必要になります。もちろん手間さえ考えなければ、この方法がもっとも確実です。ボタンが使用可能かどうかを事前に調べておくこともできます。

 次に、マウスポインタをボタンの位置に置いてクリックする方法があります。これはボタンの座標を調べる手間がかかるにも関わらず、ボタンが使えるかどうかだけでなく、そこにボタンがあるかどうかさえも分かりません。普段はあまりお奨めできない方法です。ただし、ボタンの扱いが特殊なアプリケーション(例えば Microsoft Excel)の場合は、しかたなく利用する場合もあります。

 最後に、キータイプによるボタン選択の方法があります。例えばリターンキーやエスケープキーを押すことで、ダイアログの動作を決定することができます。この方法は非常に簡便なのですが、ボタンの状態を得られないことや、操作できないボタンがあるという欠点があります。


アプリケーションの起動・アクティベート

 スクリプティングに対応していないアプリケーションの中には、アクティベートさえスクリプトから行えないものもあります。このような場合、アプリケーションの起動やアクティベートはアプリケーションファイルをFinderから開くことで行うことができます。

 もちろんアプリケーションファイルの位置を直接指定しても構いませんが、アプリケーションのバージョンアップや移動のたびにスクリプトの書き換えを余儀なくされるため、さらに確実な方法を紹介します。

 Finderでは、クリエータの指定によってアプリケーションファイルのパスを得ることができます。例えば「miniCD Book Reader」というアプリケーションは、そのクリエータ'rmCD'によって次のように起動できます。

  tell application "Finder"
    open application file id "rmCD"
  end tell

 この方法は、アプリケーション名が変更になった場合でも問題なく使用できます。


ファイルの保存

 しばしば「保存ダイアログでキータイプをして保存場所を決定する」という方法が紹介されていますが、この方法は避けて下さい。繰り返しになりますが、日本語環境ではキータイプを安定して得られませんし、フォルダ名が日本語の場合、そのフォルダをどうやって指定するかなど問題が山積しています。あくまでも確実な方法を選択して下さい。

 もっとも確実な方法は、保存ダイアログで「デスクトップ」ボタンを押し、ファイル名はクリップボード経由でペーストする事です。もちろんデスクトップ上にファイルを置くのは不安ですので、処理が終わった後Finderで任意の場所に移動しておくといいでしょう。


Tipsに戻る
AppleScriptのページに戻る
このホームページに関するお問い合わせは、karino@drycarbon.comまで。