お知らせ

Windows8にシャットダウンのショートカットを作る

Windowsにカウントダウン式のシャットダウンを行うスクリプトを作ってみます。

Windows8でなくとも、WindowsXPやWindows7でも実行できます。

shutdown

Windows8のシャットダウンはタッチパネルでない場合、マウスを右端上下のホットコーナーに合わせて、チャームを出し、設定からシャットダウンを選ぶ、という手順が必要です。

win8shutdown

Shutdown.exe

WindowsにはXPのころからshutdown.exeという実行ファイルがあり、これを直接実行することで、シャットダウンを行うことができました。

コマンドプロンプトを立ち上げて以下を入力すると、30秒後にシャットダウンに入ります。(保存していない書類があるときは実行しないでください)

[text]

shutdown.exe -s -t 30

[/text]

この三十秒の間に、シャットダウンを中止するには

[text]

shutdown.exe –a

[/text]

で中止することができます。

しかし、シャットダウンのためにコマンドプロンプトからコマンドを入力するのは、むしろ手間がかかるので、実際に実行する人はいないと思います。

筆者の理想としては、Macのシステム終了のように、終了を実行してから、自動的にカウントダウンが始まり、その間に即時終了とキャンセルのできるものです。カウントダウンが終わると、自動的にシステムが終了します。

macshotdown

これにできるだけ近いスクリプトを作って、ショートカットから実行できるようにしてみたいと思います。

スクリプト実例

ファイル名: shutdown.vbs

[vb]
Option Explicit

‘define
Dim execParam
Dim intCounter
Dim rtn
Dim WSHobj
Dim Args
Dim WaitCounter
Dim flgForth

Const DEFAULT_COUNTER = 30
Const MINIMUM_COUNTER = 10

flgForth = 0

‘Argument Check and Set

If WScript.Arguments.Count = 0 then
WaitCounter = DEFAULT_COUNTER
Else
Set execParam = WScript.Arguments

If IsNumeric(execParam(0)) = false Then
WaitCounter = DEFAULT_COUNTER
Else
WaitCounter = Cint(execParam(0))
End If

If WScript.Arguments.Count = 2 Then
If execParam(1)="f" Then flgForth = 1
End If

End If

If WaitCounter <= MINIMUM_COUNTER Then WaitCounter = MINIMUM_COUNTER

‘Waiting loop
For intCounter = WaitCounter to 1 step -1

Set WSHobj = WScript.CreateObject("WScript.Shell")

Args = "cscript ""popup.vbs""" _
& " """ & CStr(intCounter) & "秒後にシャットダウンします" & Chr(13) & Chr(10) & "OKですぐにシャットダウンします""" _
& " 1" _
& " ""シャットダウン""" _
& " 1"

rtn = WSHObj.Run (Args,0,true)

Select Case Rtn
Case 1
call procShutdown

Case 2
call procAbort
Case Else

End Select

Next

Call procShutdown

Wscript.Quit

‘shutdown Procedure
Sub procShutdown
Dim Wshshell
Set Wshshell = WScript.CreateObject("WScript.shell")
If flgForth=1 then
Wshshell.run("shutdown.exe -s -f -t 0")
Else
Wshshell.run("shutdown.exe -s -t 0")
End If
WScript.Quit
End Sub

‘abort Procedure
Sub procAbort
WScript.Quit
End Sub
[/vb]

ファイル名: popup.vbs

[vb]
Option Explicit

Dim Arg
Dim rtn
Dim WSHObj

Set WSHObj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments

rtn = WSHObj.Popup(Arg(0),Arg(1),Arg(2),Arg(3))

if rtn=1 or rtn = 2 then WScript.Quit(rtn)

Set WSHobj = Nothing
[/vb]

使い方

この2つのスクリプトをそれぞれ、vbsファイルとして保存します。

それらを一つのフォルダに格納し、起動する際はshutdown.vbsをダブルクリックします。

スクリーンショット 2013-02-19 16.44.53

カウントダウンが始まります。OKを押せば即時終了。キャンセルを押すと終了をキャンセルできます。

カウントダウンがおわると、自動的にシャットダウンします。

ショートカットのつくり方

shutdown.vbsを右クリックし、ショートカットの作成を選択します。

作成されたショートカットのプロパティを開きます。

shortcut1

ここで「アイコンの変更」を選択し、電源ボタンに変えてみます。

shortcut2

このアイコンを設定して、デスクトップにコピーすれば、いつでもショートカットからアクセスできます。

shortcut

オプション

このオプションは指定しなくとも、利用することができます。

shortcut4

vbsファイルの後に半角スペースを一つ開けて、数値を入力すると、カウントダウン秒数を変更できます。

最低限の猶予のために10秒以下は設定できなくなっています。

shortcut5

カウントダウン秒数の次に、スペースを一つ開けて、fと入力すると、アプリケーションの応答を待たず、強制的にシャットダウンします。

保存していないファイルも警告なしにシャットダウンし、失われてしまいます。

あまりお勧めのオプションでないので、よく理解していただいたうえでお使いください。