タイトル画像

Windowsで最速シャットダウン

Windowsで、最速でシャットダウンするにはどのようにすればよいでしょうか。ここでは、2つの観点から見ていきます 。それはずばり、実際にシャットダウンし終わる速さと操作が終わる速さです。「どっちも一緒だろ」と思うかもしれませんが、これが違うのです。

※以下ではWindows 10とWindows 11で、10と11で略してます

実際にシャットダウンし終わる速さ

これは、何も考えずにWindowsボタンを右クリック→U→Uが最速です。10の方がわかりやすいですが、11でもできると思います。 2回目にUを押し終わった瞬間からシャットダウンが始まるので、その分終わるのも早いです。

操作が終わる速さ

最初に言うとWindowsキー+数字を押すだけでできるようになります。「Windowsキー+数字ってタスクバーのアプリ起動するのにしか使わなくない?」と 思うかもしれませんが、逆に言えば、タスクバーにシャットダウンするアプリを置けばWindowsキー+数字でシャットダウンできるようになるはずです。

というわけで、作り方を書いていきます。

シャットダウンをするには、CLIの shutdown /s を実行すればよいです。ですが、ここでバッチファイルを書けば完成…ということもありません。 というのも、バッチファイルはタスクバーにピン止めできません。ですから、最初の「Windowsキー+数字」が使えません。 このため、 shutdown /s を実行するものを実行ファイルにしないといけないということです。

どうすれば一番手っ取り早いか考えたのですが、Rustを使うことにしました。 Pythonの方がちょっと楽ですが、そんなに変わりませんし、pyinstallerを使うと起動まで少し時間がかかるので、Rustを使った方がいいかなとなりました。

肝心のプログラムですが、以下です。

use std::process::Command;

fn main() {
    Command::new("shutdown")
        .args(&["/s"])
        .spawn()
        .expect("failed to shutdown");
}

これだけです。やってることとしては、 shutdown コマンドを実行するようにして、 /s という引数を付けているといったところです。

こいつを cargo build -r してやると一応最適化がされたバイナリが吐き出されるので、 target/release/<プロジェクト名>.exe をエクスプローラーで見つけてタスクバーにひっぱると、 Windows+番号を押した後しばらくするとシャットダウンされるはずです。 ちなみにrustcを使うと、 rustc shutdown.rs して、カレントディレクトリのshutdown.exeをタスクバーに持っていきます。

せっかくなので、Pythonとも比較しておきます。

import subprocess

subprocess.run("shutdown /s")

短い。

こいつは、pyinstallerを pip install pyinstaller なりでいれて、 pyinstaller shutdown.py を叩いて、 dist/shutdown.exe をタスクバーにもってけば行けるはずです(試してない)。