ウィンドウをモニターする その1

ここではPowerProのモニタリング機能を使ってみます。

ウィンドウをモニターするというのはあるアプリケーションまたはウィンドウが起動しているかいないかを監視するという意味です。 そのアプリケーションが起動しているならば何々〜する、といったアプリケーションやウィンドウのあるなしにより特定の処理を させることができます。

例えばこれから紹介していく使い方である、指定したアプリケーションが起動したら起動していることを示す目印をつける機能や、 あるアプリケーションが起動したら自動でツールを起動させ、そのアプリケーションが終了したらツールも自動で終了させるといった 処理も可能になります。

さて、この機能がどこにあるのかというとCommand ListsタブのSetupの中のSpecial Listsタブの中にあります。 ここは4つのスペシャルリストを指定するタブです(詳しくはSpecial Listsについてを見てください)。 しかし今回使うのはこのタブの一番上にある「Run monitor list each second(gray every 2 seconds)」です。実はこれもスペシャルリスト の一種なんですが使い方が特殊なのでスペシャルリストの4つに加えてません。

それではこの項目にチェックを入れるとどうなるのでしょう?この項目にチェックを入れると「monitor」という名前のコマンドリストが 1秒ごと(灰色チェックは2秒ごと)に実行されるようになるだけです。ちなみに「monitor」というコマンドリストは最初はないと思うので 自分で作ります。

コマンドリストを実行するってどういうことだ?と思った方もいるかもしれません。コマンドリストを実行するということはそのコマンドリストの アイテムを上から順に実行していくことです。例えばプログラムを起動するコマンドがいくつも並べてあるコマンドリストを実行すると そこにある全てのプログラムが順に起動されます。コマンドリストを実行するには普通は*Script Runコマンドを使います。

ではコマンドリストを実行することがなぜウィンドウを監視することになるのでしょうか。それはスクリプトを使うことによって実現します。 つまり「もし〜が起動していれば〜を実行する」というスクリプトを作ってそれをコマンドリストに登録、毎秒または2秒ごとに実行してやれば結果的には ウィンドウを監視することになるわけです。

というわけでここではスクリプトを多用します。スクリプトというとなんか難しそうだなぁ、と思うかもしれません。 しかしPowerPrのスクリプトはそれほど難しくありません。なぜならあまり厳格な文法がないからです。 が、ここではスクリプトの説明をしていてはキリがないのでとりあえず最低限のスクリプトの使い方しか説明しません。 スクリプトを使えばかなり高度で複雑な処理が可能です。もっと勉強したいと思った場合はとりあえず今は自分で勉強してみてください。


◆ 注意事項

前置きが長くなりましたが今回の使い方ではちょっと注意したいことがあります。問題となるのは「コマンドリストが毎秒(2秒ごと)実行される」ということです。 「monitor」と名づけられたコマンドリストが毎秒実行されるのでそこに無条件であるアプリケーションを起動させるコマンドがあったとすると そのアプリケーションは毎秒起動させられることになります。そうなったら大変ですね。そこで条件をつけるためのIf文などのスクリプトが 必要になるわけです。無条件に起動させるようなコマンドは絶対に入れないでください(どうしても毎秒起動させたいというならいいですが)。

またIf文などを使ってもスクリプトの組み方を間違えていれば毎秒起動させる、という事態に陥らないとも限りません。なのでこのモニター機能 を働かせる前に他の操作でそのスクリプトを一回だけ動かしてテストしてみてください。条件が整ったときに思ったとおりの動作をすれば成功です。 確認後に「monitor」というコマンドリストにそのスクリプトを追加してください。


◆ スクリプトを書く場所

スクリプトを書く場所は主に2箇所あります。コマンドリストに直接書く場合とテキストファイルに書く場合です。If文を使うときは コマンドリストに直接書くのはかなり面倒なので今回はテキストエディタに書いてそのテキストファイルを「monitor」コマンドリストの中で *Script RunFileコマンドを使って実行する方法をとります。詳しくは後ほど。


それでは具体的な使い方を見ていきましょう。

◆ 起動状態を表示

指定したアプリケーションが起動したらバーの色を変えて起動していることを知らせる機能です。この使い方はPowerProに同封されていた Script Tutorial(PPST 1.01.chm)のScripts libraryにあったStuart Malis氏のProgram Monitorを参考にしたものです(というか同じです)。

どのようなものかというと下図のようにバーを用意して表示します。



背景もバーも灰色で見にくいですがバーにWinampやDonutと書かれています。これはWinampもDonutも起動していない状態なので WinampもDonutのボタンも灰色になっています。ここでWinampを起動させると…



このようにWinampのボタンの背景が緑になります(色は自分で好きなようにできます)。またWinampを終了させると



またWinampのボタンが灰色になります。もちろんDonutを起動させれば同じように色が変わります。

このように特定のアプリケーションが起動するとボタンの色が変わり、終了すると元に戻るという機能です。ランプのようにすると 見ただけで起動状態がわかります。人によってはあまり役に立たないと思いますが今回はモニターを使った典型的な例として挙げてます。


まずランプの役目をするバーを作りましょう。名前は適当でいいですがとりあえず「Monitor Bar」という名前のコマンドリストを作ります。 このコマンドリストにランプ表示させたいアプリケーションの名前を追加します。新しいアイテムを作って「Name」にアプリケーション名を 書けばいいです。他の部分は全く指定しなくてもかまいません。次にバーとして表示させるために「Auto show as bar」にチェックを入れます。



今回の例では上のような設定になっています。


次にスクリプトを作ります。メモ帳でも何でもいいのでテキストエディタを起動させてください。最初から今回使ったスクリプトを 見せます。


;Winamp用の処理
if(anywindow "*winamp*") do
    *format item item 1 list "Monitor Bar" ownback 1 colorback 8453888
else
    *format item item 1 list "Monitor Bar" ownback 1 colorback 8421504
endif

;Donut用の処理
if(anywindow "*donut*") do
    *format item item 2 list "Monitor Bar" ownback 1 colorback 8453888
else
    *format item item 2 list "Monitor Bar" ownback 1 colorback 8421504
endif

今回の例ではこのスクリプトを使いました。「;」で始まる行はコメントです。

このスクリプトは2つに分かれます。コメントに書かれている通りWinamp用の処理とDonut用の処理です。それぞれのコメントのあとの スクリプトを見て比べるとanywindowのあとの文字列と*formta item itemの後の数字が違うだけで形は一緒です。 これは「指定したアプリケーションが起動しているならば背景色を緑に変えて起動していなければ 背景色を灰色にする」という処理はWinampでもDonutでも同じだからスクリプトの形も同じになるのです。微妙な違いについては後で説明します。

まずはWinamp用の処理から見ていきましょう。最初に「if (anywindow "*winamp*") do」とあります。ifはわかると思いますが条件判断のための キーワードです。anywindowはこのanywindowの後に続くキャプション(今回の例では*winamp*)を持ったウィンドウを存在する全てのウィンドウから 探してあったなら正しいとするキーワードです。つまり最初の文は「もし*winamp*というキャプションを持ったウィンドウが存在するならば」 という条件を表します。ちなみに*winamp*の「*」はワイルドカードです。これがWinampが起動しているかを判断する文となります。

先にここで使われているif文について説明してしまいます。ここではif文は次のような形をしています。


if( 文A ) do
    文B
else
    文C
endif

これの意味は次のようになります。「もし"文A"ならば"文B"を実行し、もし"文A"でなければ"文C"を実行する」という意味です。 つまり今回のWinamp用の処理では「もし*winamp*というキャプションを持ったウィンドウがあれば、*format item item 1 list "Monitor Bar" ownback 1 colorback 8453888 を実行しもし*winamp*というキャプションを持ったウィンドウがなければ、*format item item 1 list "Monitor Bar" ownback 1 colorback 8421504 を実行する」ということになります。

ではこの*format〜の部分はどういう意味でしょうか。この*formatはBuilt-in コマンドの*Formatと全く同じです。PowerProではスクリプトで Built-in コマンドをそのまま使うことができます。*formatの後の一つ目の「item」は*formatコマンドの「Item」アクションの意味です。 この*format itemコマンドはバーのフォーマットを変えるコマンドです。これによってボタンの色を変えるわけです。

2つ目の「item」はバーの中のアイテム番号を指定するためのキーワードだと思います。ここでは「item 1」と1という数字がitemの 後に書かれています。これはバーの中のボタンの1番目を意味するものです。つまり今回の例では「Monitor Bar」の1番目のアイテムである Winampと書かれたボタンを意味するわけです。ちなみにDonut用の処理の方を見ると、*format item item 2となっています。この「2」は 「Monitor Bar」リストの2番目のアイテム、すなわちDonutと書かれたボタンを意味するということですね。

次の「list "Monitor Bar"」はフォーマットを変更するボタンが含まれたバーのコマンドリストを指定するものです。当然この例ではlist の後に「"Monitor Bar"」を続けます。

「ownback 1」はなくてもうまくいく場合があるようですがあったほうが確実なので入れています。固有の背景色を持たせるという意味です。

「colorback 8453888」というのは背景色の色を指定する部分です。8453888は緑で8421504は灰色を意味します。しかし他の色の数字がわかりません。 そこでほしい色の数字を得るために一時的にCommand Listsなどのアイテム編集ダイアログを開いて*Format Itemを指定します。 「Enter format keywords〜」のエディットボックスの横にあるボタンを押します。



このようなダイアログ(Item Changeダイアログ)が出てきます。実はここで設定したことがテキストとして書きかえられ2番目の「item」以降のキーワードになります。 なのでまず図のようにバーやアイテム番号、背景色、「Use own background〜」などを設定した後にアイテム編集ダイアログの 「Enter format keywords〜」のところを見ると



図のようにスクリプトに書いてあったものと全く同じものがあることがわかります。結局のところItem Changeダイアログから好きなように設定して 「Enter format keywords〜」に書かれた文字列を「*format item」のあとに続ければいいことがわかります。自分で他のフォーマットに したいけど色や構文がわからないときはこの方法を使ってください。

大体これでスクリプトの意味がわかったでしょうか。全く同じことをやる場合は上のスクリプトをコピーしてメモ帳に貼り付け、 変えるべきところだけ変えて使った方が楽でしょう。変えるべきところというのはまずanywindowの後のキャプション、2番目のitemの後の数字、 listの後のランプとして表示させるバーの名前、colorbackの後の数字(これは先に言ったようにItem Changeダイアログから取得してください) だけ変えればそのまま使えるはずです。あとは自分で好きなアプリケーション用に書き換えてください。

スクリプトができたらそのスクリプトをテキストファイルに保存してください(名前は適当でいいです)。

これを「monitor」コマンドリストに追加しなければなりません。「monitor」という名前のコマンドリストを作ってください。 これは最初にいったように特別なコマンドリストで「monitor」という名前でなければなりません。このコマンドリストが毎秒実行されるわけです。 monitorコマンドリストに新しいアイテムを作って*Script RunFileコマンドを割り当てます。当然ここで先ほど作った スクリプトが書かれたテキストファイルを指定します。

さてこれで準備が整いました。あとはCommand ListsのSetupでSpecial Listsタブの一番上にある「Run monitor list each second(gray every 2 seconds)」 にチェック(2秒ごとに実行する場合は灰色チェック)して設定を閉じればモニタリングが開始されます。


今回は長くなったので、あるアプリケーションが起動したら自動でツールを起動させ、そのアプリケーションが終了したらツールも自動で終了させる、という使い方は 次のその2で説明します。


その2へ   トップに戻る