【Windows Server 2008】Server Core に時計はあるか? ~ その2 BGInfo を使用する

前回の続きです。

【Windows Server 2008】Server Core に時計はあるか? ~ その1

【時計の実装例 その2】 BGInfo を使用する

BGInfo はご存知でしょうか?マイクロソフトのセミナー等に参加されたことがある方ならば、Zoomit とともにご覧になったことがあるかと思います。BGInfo は、システムの情報(コンピュータ名やIPアドレス等)をはじめとする任意の文字列を壁紙に焼き付ける機能を持っています。デモ機を多く抱えるエバンジェリストの心の友と言っても過言ではないツールです。

以下の画面の右半分に書かれているのが、BGInfo によって書き込まれた情報です。

BGInfo は Microsoft TechNet サイト内の Windows Sysinternals で配布されているツールです。Windows Sysinternal では多くの使いやすいツールが提供されていますので、IT Pro の方々は是非とも一度チェックしてみてください。

ここまで書くと、これからやることがバレバレですね。そうです。時刻を背景に書き込んでしまおうということです。BGInfo のよいところは、背景として設定されている画像があっても、その画像と文字列をマージしてくれるというところです(背景画像を更新してしまうわけではなく、マージされた画像はテンポラリのbmpファイルとして保存され、それが表示されます)。 

ではさっそくはじめましょう。


※以下の作業はServre Core 以外のマシンで行ってください。なぜならば、Server Core ではブラウザが使えませんし(コマンドブラウザが使える可能性はありますが...)、標準で ZIPファイル を解凍する手段がありません。

はじめに、BGInfo v4.12 をダウンロードしてください。ZIP形式で保存できますので、解凍して BGInfo.exe を取り出します。

取り出した BGInfo.exe を Server Core にコピーしましょう。ひとまず、USBメモリか何かでコピーするのが便利でしょう。

USBメモリを Server Core から安全に取り出すには、以下を参照してください。 

【Windows Server 2008】Server Core に挿した USB ドライブを安全に取り出すには


※ 以降は Server Core で行ってください

Server Core 上で早速 BGInfo を起動してみましょう。以下のような画面が表示されます。

でも油断しないでください。規定では、10秒後に勝手に終了してしまいます。これは、ログオンスクリプト等で起動した場合にいつまでも常駐して邪魔をしないようにするためです。

今回は BGInfo の環境設定を行うので終了しないようにします。そこで、起動直後、以下の画面の赤丸部分をクリックしてください。

上記画面の左側に表示されている「Boot Time: <Boot TIme >」といった文字列が画面に表示する文字列になります。ご覧頂くとだいたい想像できると思いますが、既定ではブート時間やCPUの種類等が表示されます。上記画面は初期設定のままなので、ひとまずこれをクリアしてしまいましょう。もちろん、時刻と一緒に表示したいのだ!ということであれば残しておいても結構です。

標準では現在の時刻を表示するためのフィールドは用意されていません。そこで、時刻を表示するためのフィールドを作成します。

画面の右側にある [Custom] ボタンをクリックしてください。以下のような画面が表示されます。

次に、上記画面 左下の [New] をクリックすると、以下のような画面が表示されます。

 

まずは、「年」を定義しましょう。[Identifier] に 「YEAR」と入力してください。別の名前でも問題はありませんが、識別しやすいようにしておきます。

[Replace identifier with:] で [WMI Query] を選択します。これは何を意味するか...WMI クエリーの結果を受け取って表示することができるんですねぇ。これは便利です。

ということで、[Path] にはWMIクエリーを入力するわけですが、ソラで入力するのは厳しいですよね。そこで [Browse] をクリックしてください。以下のように、WMI のクラスとプロパティを選択する画面が表示されます。ここに表示されるクラスとプロパティは bginfo にハードコーディンスされているものではなく、システムから直接拾ってきているところがニクイです。

ここでは、上記のように、WMI Class に 「Win32_LocalTime」、Class Property に 「Year」を選択しました。Win32_LocalTime は、現在選択されているロケールにあった日時を返すクラスです。日時関係では他にも、Win32_CurrentTime や Win32_UTSTime がありますが、ここで使用するには Win32_LocalTime が最も適しています。

この状態で、[OK] を2回クリックすると、以下のような画面に戻ります。

もうコツはつかんでいただけたと思います。同じ作業を、「月」「日」「時」「分」についても繰り返し、最終的に以下のようにしてください。

 上記画面でOKをクリックすれば、ひとまず準備完了です。

Fields には、追加した フィールドがリストされています。例えば、「Year」を選択して [<- Add] をクリックすると以下のように表示されます。

もし、以下の状態で [Apply] をクリックすれば、デスクトップには 2008 とだけ表示されます。

ちなみに、実際に日時が格納されているのは <YEAR> や <MIN> です。なので、デスクトップに、

YYYY/MM/DD HH:NN

と表示するのであれば、以下のように設定します。

最後に、 [Position] ボタンをクリックして日時の表示場所を設定し、Apply をクリックすればOKです。

私のデスクトップ(Vistaですが)では、以下のように表示されています。わかりやすいようにフォントを大きく設定してありますが、背景とマージされているところがご覧いただけると思います。

さて、これで終わりかと言えばそうではありません。

時刻を表示するたびに、BGInfo を起動してApply をクリックしなければならないなんてのはナンセンスです。

そこで、BGInfo を起動して Apply をクリックする操作を自動的に行うようにします。

Server Core のコマンドプロンプト上から、以下のように入力してみてください。<path> は bginfo をコピーした場所です。

<path>\bginfo /timer:0

特にダイアログ等が表示されず、背景の日時が変わったと思います。あとはご想像通りです。タスクマネージャで定期的に実行すればよいわけです。

以下のように schtasks コマンドを使用して、上記コマンドをタスクマネージャに登録しましょう。以下のコマンドでは、1分に1回自動的に bginfo を実行し、背景を書き換えています。

schtasks /Create /SC MINUTES /MO 1 /TN showDateTime /TR "C:\bginfo.exe /timer:0"↓schtasks /Create /SC MINUTE /MO 1 /TN showDateTime /TR "C:\bginfo.exe /timer:0"※てんちを さんよりご指摘いただきました。てんちを さんありがとうございました!

regedit /a bginfosettings.reg "HKEY_CURRENT_USER\Software\Winternals\BGInfo"