2010/08/12

Window.observe()でウィンドウの表示などに応答

NILScriptでは、「Window」ユニットに用意されている機能を使って、自前のGUIウィンドウを表示したり、他のプログラムの持つウィンドウを操作したり出来ます。

多くの機能が用意されているWindowクラスですが、中でも特徴的なのはウィンドウの生成や表示を監視してコールバック関数を実行してくれる「Window.observe()」でしょう。
この機能では、イベントの発生をシステムから通知してもらうシェルフックという仕組みを使用しているため、ループやタイマーでウィンドウの状態を監視するのに比べて低負荷で素早い応答が可能になっています。

次のスクリプトは、Window.observe()を使用したスクリプトの例です。
ここでは、ウィンドウの表示を監視し、条件に一致するウィンドウだったらそのウィンドウを閉じるという処理を行っています。
==の後の文字列は、それぞれ実行ファイル名とウィンドウタイトルの条件を指定しています。これを変更すれば、不要なダイアログなどを自動で閉じるツールとして使えるでしょう。

Main.createNotifyIcon();
var Window=require('Window').Window;
Window.observe('show',function(e){
 if((e.window.ownerProcess.name=='notepad.exe')&&(e.window.title=='行へ移動')){
  e.window.close();
 }
});

Window.observe()の第1引数はイベント名で、以下の物を指定できます。

activate
新たなウィンドウがアクティブになったとき。
create
ウィンドウが生成されたとき。
destroy
ウィンドウが破棄されたとき。
show
表示されたとき。なお、ツールチップなどのウィンドウでも発生する。
hide
非表示になったとき。
redraw
タイトルバーの内容が変更されたときなど。変更前と同じ内容の時もある。

第2引数には、イベントが発生した時に実行されるコールバック関数を指定します。
この関数の第1引数には、「window」メンバにイベント発生元のウィンドウを表すWindowオブジェクト、「event」メンバに発生したイベント名が格納されたオブジェクトが渡されます。
Windowオブジェクトに用意されている機能については、NILScriptに同梱の「doc\Window.txt」を参照してください。

0 件のコメント:

コメントを投稿