このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

AppleScriptでイベントに失敗

発言者:いしかわ
( Date Monday, April 13, 1998 10:18:26 )


皆さんこんにちは。いつもお世話になってばかりで恐縮です。
AppleScriptに関して質問させてください。
ChemDrawというドロー系のソフトのグラフィックをアプリケーション上でコピーし、
クリップボード経由でファイルメーカーに取り込もうと画策しております。

そこで下のようなスクリプトを書きました。しかしファイルを開いて
"Select All", "Copy", "Close" までは良いのですが、
最後にファイルメーカーにペーストするところで
「ファイルメーカー Pro got an error, イベントに失敗しました」
とでてうまくいきません。

set tgFile to "Macintosh HD:cdr:SD0002.CDR" 

tell application "CS ChemDraw Proェ"
  open file tgFile
  do menu item "Select All"
  do menu item "Copy"
  do menu item "Close"
end tell

tell application "ファイルメーカー Pro"
  activate
  go to cell "picture" of current record
  paste
end tell


もちろんこの操作はマニュアルでやればうまくいきます。
なにかお心当たりがある方いらっしゃいましたら
お知恵をお貸しください。

田中求之 さんからのコメント
( Monday, April 13, 1998 13:33:10 )

ChemDraw は持っていないのですが、ファイルメーカーがどんなエラーを出しているのか
もう少し詳しく状況がわかれば対処方法が分かるかもしれません。

以下のように、ファイルメーカーの実行部分を try で囲んで、エラー番号をつかまえて
みてください。

try
  tell application "ファイルメーカー Pro"
    activate
    go to cell "picture" of current record
    paste
  end tell
on error errMsg number errNum
  display dialog (errNum as string)
end try

これでエラー番号は何番が表示されますか?

それと、ChemDraw でのコピーが終わった時点で

tell application "Finder"
  activate
  open clipboard
end tell

でクリップボードの内容を表示して、ちゃんとデータがコピーできているかも
確認してください。

いしかわ さんからのコメント
( Tuesday, April 14, 1998 02:44:58 )

田中先生のおっしゃる通りにスクリプトを書いてチェックして見ました。

するとエラーナンバーは「-10000」でした。
これはペーストしたあとにでます。
このエラーコードは何を意味するのでしょう?

それからクリップボードをチェックしますと、
そこにはグラフィックは取り込まれておらず、その前に使用した
内容が入っているだけでした。

ひょっとするとアプリケーションが独自のクリップボードを用意している
のかと思い、マニュアルでコピーペーストする際にクリップボード(ファインダーに戻って)
をチェックしましたが、ここではちゃんとグラフィックが入っていました。

なにか手がかりになりますでしょうか?
よろしくお願いします。

田中求之 さんからのコメント
( Tuesday, April 14, 1998 12:58:13 )

-10000 は、AppeEventError です。おそらく、クリップボードに画像データが
入っていないために、Paste コマンドが実行できなかったということでしょう。

ChemDraw から画像をコピーする部分に問題があるようですね。

マニュアルでコピーすると大丈夫なら、普通は do menu でも同じ結果にならないと
いけないはずなのですが…??

do menu の実行中は、ちゃんと画像が選択されて、Edit メニューが反転する
(コピーした瞬間)という動作を行っていますか?

それと、ChemDraw には do menu 以外に AppleScript のコマンドはありますか?

いずれにせよ、ChemDraw から画像を取り込む部分を工夫する必要があるようです。

いしかわ さんからのコメント
( Wednesday, April 15, 1998 03:13:48 )

解決しました!

>do menu の実行中は、ちゃんと画像が選択されて、Edit メニューが反転する
>(コピーした瞬間)という動作を行っていますか?

この動作をチェックするために、ChemDrawのウインドウをactivateするようにしたら
コピーペーストが正常に行われるようになりました。

こういった操作はやはりバックグラウンドではできないものなのですね。
お陰様で問題は解決できました。
田中先生、ご指導ありがとうございました。

PS ChemDrawはスクリプト対応ですが、上記の様なSelect all, copyを
やってくれる命令「structure」がありました。しかしこれはウインドウを
アクティブにしてもクリップボードの内容が更新されないときがあり
うまくありません。ほかの命令も思ったように動かないものが多かったです。
もしどなたかChemDrawをAppleScriptで動かしている方がいらっしゃいましたら
情報を交換しませんか?

田中求之 さんからのコメント
( Wednesday, April 15, 1998 11:54:10 )

>こういった操作はやはりバックグラウンドではできないものなのですね。

そうなんですよ。クリップボードは、常に、一番手前のアプリケーションが操作する
ものとなりますので(ワープロで文書を編集中にバックグランドで勝手に書き換えら
れたら使い物になりませんよね?)、クリップボードを操作する場合は、必ず
activate する必要があります。

なにはともあれ、うまくいってよかったです