Skip Metro Suite の仕組み

Skip Metro Suite には、Windows 8 起動時に、自動でデスクトップを表示し、かつ、ホットコーナーを選択的に無効にする機能がある。これはどういう仕組みで実現しているのかを調べた。

Process Monitor を使用して、Skip Metro Suite がレジストリにどんな値を書き込んでいるのかを調査した結果、ある 1 つのキーのみを書き換えていることが判った。すなわち、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit である。Skip Metro Suite で、"Enable Skip Metro Suite" を有効にすると、当該キーの値が、C:\Windows\system32\userinit.exe,C:\Windows\skipmetrosuite.exe, に変更された。無効にすると、C:\Windows\system32\userinit.exe, になった。

Microsoft のサイトによると、レジストリ キー ...\Winlogon\Userinit は、「ログオン時に、シェルの前にプログラムを起動する方法」で使われるものらしい。Windows 起動時にプログラムを実行する方法は、他にもいくつかあり、たとえば、スタートアップフォルダにプログラムへのショートカットを入れておくというものがある。...\Winlogon\Userinit に登録しておくという方法は初耳だ。きっと、この方法でないと、Metro こと Modern UI のスキップは実現できないのだろう。

そうして、Windows 起動時に実行される skipmetrosuite.exe というファイルは、Skip Metro Suite により、C:\Windows\ フォルダに自動生成される。このプログラムが、デスクトップを表示したり、ホットコーナーを操る役割を担当しているに違いない。Windows 起動後、タスク マネージャー を閲覧したところ、このプログラムは見当たらなかった。役割を終えると、自動で終了するようだ。ホットコーナーの無効化は、おそらく「四隅にある不可視なウィンドウを閉じる」というような操作なのだろう。

そしてようやく

以下の条件を満たすことで、PC の電源を入れたあと、自動でスリープ状態に移行する環境が実現した。

  • control.exe userpasswords2 で自動ログインを有効にする
  • Skip Metro Suite で自動デスクトップを有効にする
  • C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup に、時限式スリープ.js へのショートカットを置いておく