last modified on [2003-03-21 21.25 (JST: GMT+0900) @559]
Author: 河本孝之 (Takayuki Kawamoto, aka philsci);
1st appeared on 27th February, 2003.
Revised on [20th March, 2003], [21st March, 2003].
References:
ayamame, "litestep.exe", ls mod doc dog.
the LiteStep Documentation Effort Team, "litestep", LiteStep v. 0.24.6 documentation.
Acknowledgement: thanks to ayamame, Fizz.oO, Fuji, hideh, Toshiyuki Itakura, Naoto Kanzaki, ken, Ks, ManiMani, Yusuke Mizukoshi, mth(k), N&R, Hirohisa Teramoto, Taro "O_SAKANA" Todoroki, and especially to the LiteStep Documentation Effort Team.
Copyright©2000-2003 by Takayuki KAWAMOTO.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
A copy of the license is included in the section entitled "GNU Free Documentation License" [translation in ja].
step.rc に記述するコマンドのうち、RC コマンドは litestep.exe やモジュールなどの初期設定に使われます。それらとは異なり、「モジュールの状態(つまりはユーザーからの入力や Windows から受け取った値)が或る条件を満たしたときに発動する処理を指定したコマンド」が Bang コマンドです。Bang コマンドは他の RC コマンドや Bang コマンドの中で記述され、単に Bang コマンドを宣言しても実行されたりはしません。
ここでは、先の RC コマンドと同様に litestep.exe と lsapi.dll がサポートしているコマンドだけを紹介します(具体的には、lsapi.dll のソースコード bangs.cpp で定義されている Bang コマンド)。個々のモジュールがサポートする Bang コマンドについては、それぞれのモジュールを解説したページをご覧ください。
デスクトップ上に表示されている、アクティブ・非アクティブな全てのウインドウ、つまり最小化していないウインドウを全て垂直方向に同じ幅(デスクトップ領域を設定していない場合は、スクリーンの幅)で並べます。
デスクトップ上に表示されている、アクティブ・非アクティブな全てのウインドウ、つまり最小化していないウインドウを全て水平方向に同じ高さ(デスクトップ領域を設定していない場合は、スクリーンの高さ)で並べます。
デスクトップ上に表示されている、アクティブ・非アクティブな全てのウインドウ、つまり最小化していないウインドウを全てカスケード表示にして並べます。「カスケード表示」は、スクリーンの左上を起点として右下方向へ全てのウインドウを階段状に奥から手前へ並べていくことです。
ちなみに、マイクロソフトが提供している「マイクロソフト単語帳」でも、次のように説明されています。
複数のウインドウを少しずらしながら重ねて表示する方法。反対に、複数のウインドウを重ねずに敷き詰めるように表示する方法をタイル表示という。
デスクトップ上に表示されている、アクティブ・非アクティブな全てのウインドウ、つまり最小化していないウインドウを全て最小化します。
最小化されている全てのウインドウを、最小化する前の状態に戻します。
全てのウインドウを、いま表示しているデスクトップへ移動します。このコマンドは、全てのウインドウを或る仮想デスクトップ(virtual desktop window)へ移動させるという目的だけでなく、ウインドウが誤って表示不能なデスクトップへ移動して見えなくなったときに取り戻すという目的にも使えます。もともと、これは仮想デスクトップないし仮想ウインドウ・マネージャ(VWM: virtual window manager)用のモジュールが !VWMGather などというコマンドとして提供してきた機能ですが、現在は VWM 用のモジュールとは独立に LiteStep 自体が提供しています。
いま読み込まれているモジュールの読み込みを止めます。そのモジュールをアップデートしたり、同じような機能をもつ他のモジュールを代わりに読み込むときなどに便利です。引数にはモジュールのファイル名や、そのモジュール・ファイルへのフルパス(環境変数も使えます)を指定します。
いちど !UnloadModule で読み込みを止めたモジュールや、新規に追加したいモジュールを(LiteStep を停止することなく)読み込みたいときなどに使います。ただ、読み込まれる際には設定を step.rc から拾うので、LiteStep を !Recycle コマンドで再起動したときにエラーでシステム全体を止めたくない場合や、テーマのオプションで停止させた或るモジュールを任意に読み込み直すときに使うのでしょう。
このコマンドの引数も、モジュールのファイル名もしくはそのファイルへのフルパス(環境変数も使えます)を指定します。
Bang コマンドを連続して任意の複数回だけ実行できるコマンドです。引数として複数の Bang コマンドが使えるので、何か逐次的な処理をさせるときや複数個のモジュールで提供される Bang コマンドを組み合わせるときなどに便利です。
但し、複数の Bang コマンドをそれぞれ相互に関連付けて実行させるときは、先に実行したコマンドの処理が終わらないうちに次のコマンドが実行されてしまい、連携がうまくいかなくなる恐れがあります。そのため、インターバルを取ったりポーズをかけるようなモジュールを併用するといいかもしれません。
エクスプローラで言う「ファイル名を指定して実行」のダイアログボックスを表示します。
NT 系の環境で HKEY_LOCAL_MACHINE ... のハイブに explorer.exe をシェルとして残したままだと、このコマンドを実行するとシェルモードのエクスプローラが立ち上がるかもしれません。
なお、このコマンドで立ち上がるダイアログボックスから Bang コマンドや Wharf 用のコマンドを実行させることはできません。
LiteStep のヴァージョン情報ウインドウを表示します。現在の設定で使える Bang コマンドを一覧にしたり、開発者の名簿を表示したり、LiteStep と Windows の情報を表示したりします。

ダイアログ・ボックスに表示する数多くの情報を取り込んでメモリへロードするため、このコマンドでダイアログ・ボックスを表示すると、LiteStep のプロセスが使用するメモリ量が増加します。但し現行のビルドでは LiteStep コントロールパネルを表示する方がメモリの使用量は増えており、2002-02-08 のビルドでは !About でシステム情報のダイアログ・ボックスを表示するとメモリ使用量は 300kB くらいとなっています。
名前のとおり、何もしないコマンドです。アクションを指定する引数が必須の RC コマンドを記述したいが何もさせたくない、といった場合に使います。例えば、見栄えの調整用に表示するだけのショートカット等の画像を貼り付けたときにアクションを何も起こしたくなければ、!none を使ってダミーの実行処理をさせればいいわけです。
LiteStep で使われる全ての設定やモジュールをメモリに読み込みなおして、LiteStep を再起動させます。!Recycle するためのメニューやボタンからこのコマンドを実行する際に Shift キーを押しておけば(例えば、ポップアップのメニュー項目に「LiteStep の再起動」といった項目があって、その項目を実行するときに Shift キーを押しながら実行すれば)、再起動は中断されて、再起動の処理を続行していいかどうかをたずねるダイアログ・ボックスが表示されます。OK を押せば、そのまま再起動の処理が続行されます。
再起動では全てのモジュールを読み込みなおすので、テーマの設定などを変更して変更点を反映させるためだけに再起動をすると、その変更点と他のモジュールの設定が整合しなくなったときや設定そのものが間違っていたときなどに LiteStep のシステム全体が異常処理を起こしてプログラムを終了させるかもしません。頻繁に再起動を繰り返す方は、モジュールの設定を読み直して反映させたいなら !Recycle や後出の !refresh を使ってもよいと思いますが、一つか二つのモジュールをアップデートするだけなら、!Unloadmodule, !Reloadmodule を使うほうが賢明でしょう。
また、LiteStep のシステム全体でどこかにメモリ・リーク(プログラムが不必要になったデータ領域のメモリを解放し損なうか忘れて、メモリへデータをロードしたり書き込むたびにメモリ使用量が増大していくこと)が存在すると、!Recycle するたびに LiteStep のメモリ使用量が増大してしまいます。実際に僕のテーマ faverhymer を 2003-02-08 ビルドで !Recycle した場合、下のような結果になっています(e-sushi さんの repeat.dll というモジュールを使って自動的に繰り返して !Recycle する方法もありますが、ふつうに !Recycle して問題のないシステムが repeat.dll で !Recycle すると必ず落ちるという現象もあるので、下の表は一回ずつ Ctrl + Alt + F1 で表示される LiteStep のシステムメニューから !Recycle したときの結果です)。
| 回数 | memory (kB) / GDI Handlers / USER Handlers |
|---|---|
| 初 回 | 10,224 / 113 / 84 |
| 5 回 | 10,396 / 135 / 112 |
| 10 回 | 10,408 / 145 / 127 |
| 20 回 | 10,448 / 165 / 158 |
| 30 回 | 10,584 / 185 / 191 |
| 40 回 | 10,608 / 205 / 221 |
| 50 回 | 10,632 / 225 / 251 |
条件は、Dell Dimension 8200 (Pentium 4, 2 GHz + 512 MB DDR-SDRAM, owner: chiharu fukada)へコア・ファイル全てのロードと、desktop2.dll, shortcut3.dll, popup2.dll, hotkey.dll を全て threaded オプションで読み込んでいます。再起動には Ctrl + Alt + F1 の LiteStep システム・メニューを使い、他には記録用のテキストエディタ xyzzy(亀井哲弥さん)と、プロセス監視用の Process Explorer (Mark Russinovich and Bryce Cogswell at Winternals Software) をスタートアップから立ち上げておいてシェルによって起動されていない状態としました。上記の表で "GDI Handlers" とあるのは GDI: Graphics Device Interface によって作成されるグラフィカルなオブジェクト(ショートカット画像など)を管理するメモリ領域のことです。同じく、USER Handlers は恐らく LiteStep のコア・ファイルや外部モジュールの作者が独自に定義した処理内容で必要なメモリ領域のことでしょう。
上記の表を見ると、最近のビルドでは(テーマにもよりますが)!Recycle によるメモリ使用量の増加は大した問題ではなく、寧ろ個々のモジュールが新たに(メモリ・リークではなくもともと必要な量として)消費するメモリの方が増加する傾向にあると言えます。例えば、上の表で 50 回 !Recycle を繰り返した後に popup2.dll でコントロール パネルやマイ コンピュータをメニュー展開した後では、11,804 / 248 / 277 という数値になります。50 回も再起動して増加したメモリ量よりも、一回ずつポップアップを展開した方がメモリの使用量は多いわけです。したがって、テーマの作者としては読み込むモジュールの個数よりも、寧ろ個々のモジュールで使う機能やオブジェクトに注意しながら画像や選択項目を考える方が、無駄なメモリを消費しないテーマを制作できるでしょう。
先の !Recycle と同じようなコマンドですが、!Recycle とは違って、個々の外部モジュールに関する設定だけを読み込み直します。もう一つの似たようなコマンドである !Refresh とも違って、!Reload ではモジュールに設定の変更を通知しません。
"簡易 Recycle" と言われる処理を行い、LiteStep のシステム全体を再起動することなく、最近のモジュールの設定だけを読み込みなおします。
LiteStep Documentation Effort Team が書いた解説には「比較的古めのモジュールの設定は読み込まないので、このコマンドは控えめに使うほうがよい」と書かれてあります。んが、どういう意味なのかよくわからないですね。
ではまず、これまで紹介してきた !Recycle, !Refresh, !Reload の違いについては、開発チームのメンバーだった Message さんが次のように説明しています。
!recycle clears the settings cache, stops all modules, reloads the cache, and restarts all modules.
!Recycle はキャッシュされた設定項目をクリアして、全てのモジュールを停止した後に、設定をキャッシュしなおして再び全てのモジュールを読み込み直します。!refresh clears the settings cache, reloads the settings cache, then sends the LM_REFRESH message to all modules, they can then readjust their properties[.]
!Refresh はキャッシュされた設定項目をクリアして、全てのモジュールに LM_REFRESH メッセージを送ります。このコマンドを使うと全てのモジュールに設定された値を再調整できるようになります。!reload clears the settings cache and reloads it. that's it. It is up to you to call unloadmodule/reloadmodule.
!Reload は設定をクリアしてキャッシュをやり直してからモジュールを読み込み直します。これはちょうど !UnloadModule と !ReloadModule を併用したものと同じです。["Subject: Re: [Litestep] !reload", From: Bgvinyard.aol.com, Date: Sun, 18 Mar 2001 13:19:08 EST]

この表が分かりやすいかどうかは保証できないのですが、ともかくモジュールを切り離して繋ぎなおす !Reload、Refresh メッセージを(それに対応する)幾つかのモジュールに渡して自動的に !Reload する !Refresh、そして LiteStep 全体を再起動する !Recycle という具体に区別できると思います。
現在のユーザーをログアウトして、Windows へログインするときの画面に戻します。但し、次に紹介する !Shutdown とは違って、シャットダウンのダイアログボックスは表示せず、ただちにログアウトします。
Windows を終了させるときに表示される、シャットダウンのダイアログボックスを表示します。これを表示するだけですから、ただちに Windows を終了させるわけではありません。
ちなみに、ふつう僕は MMC(管理ツール)の設定で、Ctrl + Alt + Delete でこのダイアログボックスを出していますが、Windows 2000 Professional や Windows XP ではデフォルトの設定だと Ctrl + Alt + Delete はタスクマネージャが表示されます。この三つボタンでシャットダウンのダイアログボックスを表示させたい方は、[ローカル コンピュータ ポリシー --> コンピュータの構成 --> 管理用テンプレート --> システム --> ログオン] にある「常に従来のログオンを使う」を有効にして下さい。
さきほどの !Logoff と似ていますが、このコマンドは Windows XP から導入された Fast User Switching (ユーザーの簡易切り替え)を実行して、ようこそ画面へと戻します。ユーザーの簡易切り替えを無効にしているときにこのコマンドを実行するとコンピュータがロックされた状態になります。これはユーザーの簡易切り替えとは違って、マシンをロックした本人のユーザー名とパスワードが必要です。
英語版のマニュアルには「問い合わせしない !Loggof だ」と書かれてありますが、!Logoff コマンドも問い合わせをしないので、!SwitchUser も問い合わせなしにユーザーの切り替えをするものだと考えればよいでしょう。ただしユーザーの簡易切り替えは切り替える前のユーザーをそのままログインさせた状態で実行されますから、いったんログオフする !Logoff とは違っています。
なお、英語版のマニュアルには「このコマンドは Windows XP 以降の(Fast User Switching をサポートする)OS に限られており、Windows 9x 系で使うとわけのわからないことが起こる」と書かれてあります。
LiteStep を強制的に終了させます。トレイのアイコン情報を保持しないアプリケーションを使って、通知領域(システム・トレイ)にアイコンを表示させているときは、このコマンドを使った後で LiteStep を再起動させても通知領域のアイコンは表示できないでしょう。このようなときは、アプリケーション自身に自らのアイコン情報を更新させるか、そのアプリケーションを再起動させなければなりません。
このコマンドを使うとユーザーインターフェイスがなくなってしまいます。クラッシュ時にシェルを再起動させる機能をもつシェルマネージャを使っていない場合は、特に Windows 9x 系のユーザーはデスクトップで何もできなくなってしまうので、注意しましょう。
「OK」または「キャンセル」を二者選択するメッセージ・ウインドウを表示して、それぞれの応答についてアクションを実行します。アクションは、Bang コマンドやプログラムへのパスなどを指定します。アクションを指定する文字列に空白が入る場合には、空白を角括弧("["..."]")で括りましょう。なお、二つめの文字列(タイトルバー)は、オプションです。
2003-02-08 ビルドで確認したところ、文字列に日本語を使うとメッセージ・ウインドウが表示されません。文字列には ASCII 文字だけを使いましょう。

「OK」ボタンが一つだけある、警告メッセージのダイアログ・ボックスを表示します。JavaScript の alert() メソッドで出るものと同じね。例によって、二つめのタイトルバーへ表示する文字列はオプションです。
LiteStep が保持しているログファイルの中身をクリアします。ログは IndieStep から採用されたので、それ以前の 0.24.6 ビルドでは使えません。
先のページで紹介した、LiteStep コントロールパネルを開きます。詳しい解説はそちらをどうぞ。
2002-05-08 ビルドから実装された Bang コマンドです。後のページで紹介する環境変数を新しく定義したり、あるいは既存の環境変数を書き換えるときに使います。内部的には、モジュール側から環境変数をコントロールできる LSSetVariable, LSGetVariable もあります。
このコマンドで書き換えている環境変数は、!Recycle, !Reload, !Refresh のいずれによっても初期設定した環境変数に戻ります(!Refresh は !Reload の処理を含んでいて、!Reload は環境変数を初期設定する setupVars(), SetupRC() を実行するため。!Recycle は言うに及ばず)。つか、Hotkey で書き換えを試したみたのですが、どうも 2003-02-09 ビルドでは正しく動作しないみたい。
ごみ箱の中身を空にします。Win32API の SHEmptyRecycleBin() を実行します。エクスプローラで削除するときと同じく、問い合わせのダイアログボックスが開きます。