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

Finder以外を隠すスクリプト

発言者:つちや
( Date Sunday, October 19, 1997 03:39:26 )


こんばんは。つちやです。

ちょっとしたスクリプトを作ろうとしたんですが、
完全に煮詰まってしまいました。(;_;)どうかお助けください。

というのも、サーバーを運営していると、WebサーバーやらMailサーバーやら、たく
さんのアプリケーションが立ち上がりますよね。僕のところのサーバーは、関係のな
い人も扱う機会が多いので、Finder以外のアプリケーションを起動と同時にすべて隠
してしまいたいんです。で、下のようなスクリプトを考えました。

tell application "Finder"
  set appList to processes
  repeat appOne in appList
    set visible of appOne to false
  end repeat
end tell

これじゃ全然駄目でした。そもそも、
get visible of refApp
という命令では、そのアプリのvisibleが得られないといったエラーメッセージがで
て実行できないんです。腑に落ちないのは、Finderの用語説明にはprocessクラスにv
isible属性が記載されているのに、「AppleScriptミニミニリファレンス」にはvisib
le属性_だけ_が載っていないことです。どういうことなんでしょう??

もしかして僕は、visible属性の意味を取り違えているんでしょうか。

田中求之 さんからのコメント
( Sunday, October 19, 1997 04:10:35 )

process の扱いというのは、実は Finder ではなかなか面倒なんですよね。
というのも、つちやさんのスクリプトがまさにそれなんですが、processes でリ
ストを得ても、そのリストをもとに操作しようとすると文句を言われちゃうからな
んです。

で、Finder 以外を隠す場合ですが、以下のようなスクリプトになります

tell application "Finder"
  set appList to name of application processes
  repeat with thisApp in appList
    set thisApp to contents of thisApp
    set visible of application process thisApp to false
  end repeat
end tell

プロセスの名前だけ得ておいて、操作の時点で application process XXX という
具合に、ちゃんとプロセスを対象に操作するということをはっきりさせたスクリプトを
書きます。

つちや さんからのコメント
( Sunday, October 19, 1997 04:24:49 )

は、はやいー。こんなにすばやく返事がいただけるとは...
しかもスクリプトまで書いていただいて、ありがとうございます。

さっそく試したところ、あっさりと動きました!ちくしょー!!
延べ6時間ぐらい考えたのに!
まだまだ精進が足りないですね。<おれ

usui , seiichi さんからのコメント
( Sunday, October 19, 1997 10:38:40 )

私がマックでサーバーを立ち上げて楽しんでいたときに、

次のような部分を含むスクリプトを起動項目に入れてました。


tell application "Finder"

  activate

  set visible of every process to false

end tell


これでも、同じ動作をすると思います。汎用性にかける・・・かもしれません。


#実際は日本語で書いていて、他にも機能をつけていたのですが、、、

#IE3.01なので見苦しくなってしまったことをおわびします。

田中求之 さんからのコメント
( Sunday, October 19, 1997 13:40:32 )

>私がマックでサーバーを立ち上げて楽しんでいたときに、
>次のような部分を含むスクリプトを起動項目に入れてました。

あ、そうですね。別にプロセスの選別を行う必要はないので、わざわざ repeat で
回す必要はないですね。

ということで、

tell application "Finder"
  set visible of application processes to false
end tell

でよいのでした (^_^;; 

つちや さんからのコメント
( Monday, October 20, 1997 15:26:30 )

なるほど〜。いろいろご教授ありがとうございます。

教えてもらったことをもとに、ちょっと凝ったスクリプトを作
ることができました。指定したアプリ以外を隠して、さらに
idleを使ってすべての処理が終了したらサウンドをならして終
了するというものです。起動項目の最後にいれて使うと、シス
テムの完全なスタンバイ状態がサウンドでわかるので便利。
(^^)起動項目の最後にサウンドファイルをおいていても、シス
テムが idleになる前に鳴ってしまうので、不便なんですよね。

よかったらお使いください。

→  HideApp

つちや さんからのコメント
( Tuesday, October 28, 1997 02:01:10 )

こんにちは、つちやです。
 先日システムをOS8にバージョンアップしたところ、HideAppが途中
 でエラーを起こすようになりました。調べたところ、

tell application "Finder"
  set visible of every application processes to false
end tell

のスクリプトがOS7.6の頃とちょっと違う動作をすることが原因でし
た。具体的に言うと、application processesはOS8では例えば「ファ
イル共有機能拡張」のような、バックグラウンドオンリーアプリケー
ションとして扱われているものも、 application processesとして
リストアップされることです。 OS7.6ではそうではなかったですよ
ね??(ちょっと自信なし。)そんで、それらのバックグラウンド
オンリーアプリケーションのvisible属性はどうやらリードオンリー
になっているようです(変更ができない。変更しようとすると、エ
ラーが返ります。考えてみりゃあたりまえかな。バックグラウンド
オンリーなんだから)。ただしエラーが返るのは、書き換え可能な
Visible属性を持つアプリのそれをすべて書き換えてからのようです
から、真ん中の行を何もしないエラートラップで囲めば、たぶんほ
とんどの場合、解決します。具体的には以下のように書きます。
(もちろんスクリプト初心者の方のためです。田中先生ほか、先輩
方にお教えできるレベルじゃないですから(^^;))

tell application "Finder"
 try
  set visible of every application processes to false
  on error
  end try
end tell

というわけで、ちょっとしたsummaryでした。

 #これを解決したOS8対応のHideApp2.0を作ったのでどうぞお使いく
 #ださい。もちろんフリーです。ついでに起動していないアプリのエ
 #イリアスによる誤作動のバグフィックスと、プロパティを使った動
 #作速度のスピードアップ(まあまあ速くなりました^^)もしています。

→  HideApp2.0