2012年10月6日土曜日

Windows8 で終了/再起動/スリープ を素早く行う

【まえがき】

HDD/SDDのベンチマークソフト CrystalDiskMark などで有名な hiyohiyoさんがblogの「Windows 8 用 スリープ/再起動/シャットダウン スクリプト」という記事で、
Windows 8 の終了/スリープって本当に面倒臭い!! というわけで、ネットでショートカットの作成方法などを調べてみたですがなぜか強制シャットダウン orz でうまくいかない。  
で、色々考えた結果デスクトップに対して Alt + F4 するのが一番簡単という結論に達しました。が、他のウィンドウがある場合は最小化するなりしてデスクトップを表示しないといけない・・・うん、やっぱり面倒くさい。というわけで、簡単なスクリプトを作ってみました。
とのことで、終了コマンド(終了、スリープなど)を実行するためのVBSスクリプトを公開されていました。上記記事でも言われているように、Windows 8の終了コマンドを実行する手順って
  1. 画面右上(または下)端で一旦カーソル待機
  2. 表示されたサイドメニューから「設定」を選択
  3. さらに「電源」を選択
  4. 終了コマンドを選択
と手数だけ見ても増えており、それに加えてカーソルを上下に移動させる必要があったりと、結構めんどくさいのです。
 Windows8を使い始めた当初は、「新しいOSだし、使っているうちに慣れるかな」と思っていたのですが、ここ2、3ヶ月 RP版を含め Windows8を使ってみた結論は

全然慣れません。マジめんどくさいです。



 そんなわけで、hiyohiyoさんのスクリプトを使うことにしたのですが、使っているうちに色々気になる点が出てきました。

  • SendKeys で終了コマンドを実行しているのが気がかり
  • デスクトップに無機質なVBS のアイコンが並ぶのが…

 いや、後者に関しては、VBSのショートカットを作ってアイコンを設定しても良いかなとも思ったのですが、ショートカット作ってアイコン設定するぐらいならプログラム書いたほうが早い(&後々楽な)気がしたので、終了コマンドを実行するためだけのプログラムを書いてみました。

【作成したプログラム】

SystemTools For Windows8」という名前で配布してます。

 ポイントは、Oxygen Team が配布している綺麗なアイコンでしょうか。というより、それ以外に何の取り柄もありませんが…。

 なお、Shutdown.exe/Reboot.exeは、実行中のアプリを強制的に落として、即座に終了/再起動します。アプリを終了してよいか丁寧に尋ねてくれる「Windows標準の終了/再起動」とは若干動作が異なっているのでご留意ください。



 自分は、exeファイルを直接デスクトップに並べて使っています(ファイル名はリネームしてもOKです)。

【ソースコード】

終了、再起動には、WindowsVista以降に標準添付されている shutdown.exe を利用しています。
ExitWindowsExを利用しています。(※原因はよくわからないのですが、リリースしたexeファイルからだとshutdown.exeを正常に呼び出せなかったため)

 サスペンド(スリープ)には、Windows.Forms.Applicationに用意されているメソッドを利用しています。(スリープを実行する方法について調べた中で、一番簡単かつ確実だったため)。

 なお、終了コマンドの実行方法については、コンピュータの電源切る、システムのシャットダウン、再起動、ログオフする: .NET Tips: C#, VB.NET を、shutdown.exeの使い方については、shutdown.exe とタスクで Windows を自動シャットダウン を参考にしています。