- ベストアンサー
appleスクリプトでアプリケーション名を得る方法について。
現在appleスクリプトを勉強中の者です。appleスクリプトを打つときに疑問が出てきてなかなかネットにも回答が乗っていなかったので皆様の知恵をお借りできないかと投稿しました。appleスクリプトを打つ時に通常は tell application "アプリケーション名" end tell と書くのですが、このやり方だと、特定のアプリケーションにたいしては有効なスクリプトがかけるのですが、非特定のアプリケーションにたいしては有効な書き方ができません。これを例えば最前列のアプリケーション名自動的に取得して、命令を与えるという形にしたい場合はどうすればよいのでしょうか?もしくは、appleスクリプトではそのような方法はとれず、アプリケーションごとにスクリプトを書き換えなければいけないのでしょうか?この問題についてもしわかる方がいらっしゃいましたらアドバイスよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
frontmost applicationみたいなキーワードで検索すると、いろいろ見つかりますよ。 http://www1.odn.ne.jp/~cge02410/backnumber/2006/09/23113714.html tell application currApp ほげほげ end tell としたい場合には、currAppには質問にあるようにアプリケーションの名前でもいいですけど、アプリケーションのパスとか他にも指定方法がいくつかあるようです。 アプリケーションの名前を得たい場合は set currApp to short name of (info for (path to frontmost application)) とか set currApp to name of (info for (path to frontmost application)) if currApp ends with ".app" then set currApp to text 1 thru -5 of currApp みたいな感じにすればいいようです。short nameはMac OS X 10.4以降?みたいで、代わりにnameとしたりすれば、Mac OS 9でも動きます。 set currApp to path to frontmost application as string とすればアプリケーションのパスが得られて、旧Mac OSでも動作可能です。 # AppleScriptの質問は詳しい方がいるApple Discussionsやメーリングリスト等に質問した方がより適確な回答が得られるような気もします Mac OS X v10.4 Tiger > Mac OS X Technologies > AppleScript http://discussions.info.apple.co.jp/ http://discussions.apple.com/forum.jspa?forumID=724
その他の回答 (1)
>これを例えば最前列のアプリケーション名自動的に取得して、命令を与えるという形にしたい場合はどうすればよいのでしょうか? もし、そうした書き方ができたとして、そのアプリケーションがAppleScriptに対応していない場合はどうなるでしょうか? アプリケーションによって、対応する命令などは違うということを考えないといけません。 そうなると、不特定のアプリにtell applicationを使ってAppleScriptの処理を送り実行させるということはできない、ということになります。(正確にはちょっと違いますが、まぁそう思って間違いないです) ではどうするか? アプリケーションではなく、System Eventsに対してAppleScriptを送って処理するという方法があります。System Eventsは、バックグラウンドで動くアプリケーションで、GUIを外部から遠隔操作するための機能がまとめられています。これにより、マウスを操作したりキーを操作したりするための命令類が用意されているので、これでアプリケーションを操作できます。 一度、System Eventsの命令類を用語説明から調べてみてはいかがでしょう。
お礼
アプリケーションに対応してるかどうかを考えなければいけないんですね!System EventsにたいしてAppleSvriptを送って制御ですか。。やってみます! すごく参考になりました!ありがとうございます。
お礼
そうなんです!こういうのを探していたんです!なるほど、frontmostで調べるとたくさん出てきますね!私は英語が苦手だったので、こういう単語で調べるって事に気がつかなかったです。ありがとうございました!