Windows10 PC をスタンバイ・休止状態にする1行の VBScript
Windows10 PC で、VBScript ファイルをダブルクリックで開くだけで休止状態にしたいなーと思ったので、やり方を調べてみた。試してみた限り、以下の1行の VBScript で良さそう。
hibernate.vbs
SetSuspendState
の引数にHibernate
を与えると休止状態・与えなければスタンバイになる…はずだが、差が分からん
CreateObject("WScript.Shell").Run "rundll32 powrprof.dll, SetSuspendState Hibernate"
参考にしたのは以下の記事あたり。
- VBScript PCをスタンバイにする : ( どーもボキです。 > Z_ ̄∂
- ベースにしたのはこのサイト
- Excel から
powrprof.dll
を呼ぶ VBScript - タスクマネージャからキー操作する VBScript
- dodofei.blogspot.jp: VBスクリプトでパソコンの休止状態、節電プログラム
上述のとおり、「スタンバイ」にするか「休止状態」にするか、という制御は何やらクセがあるらしく、上述のワンライナーで本当に「スタンバイ」になっているのか「休止状態」になっているのか、自分でも区別できていない。挙動は変わらない気がするのだが…。
んで、スタートメニューから操作する「正規の休止状態」をプログラムで再現するために、色々試行錯誤されているらしい。↓
- Windows7,8,10 タスクバーにスリープボタンを配置する - hatena chips
- この方法でスリープへ移行した場合、ハイブリッドスリープにはなりません。 したがって、電源が切れるとメモリ上のデータが失われます。
- この方法でスリープ(スタンバイ)へ移行した場合、タスクスケジューラからの自動復帰ができないことがあるようです。
タスクの自動実行が実行されなかったり、TV自動録画が失敗したりという悲劇が起こったりします。
rundll で SetSuspendState を呼び出したのではコマンドライン引数は無視され、すべてTrueが設定されたことになる
PowerShell から C# (Windows Forms) を呼び出すのが良いらしい。↓
- スリープ状態に移行する - PowerShell Scripting Weblog
- システムをスタンバイ、休止状態にする - .NET Tips (VB.NET,C#...)
- コマンドラインからPCをスリープさせる方法 on Windows10 - NT5.0/5.1からNT6.1/6.2/10.0へ
- Application.SetSuspendState(PowerState, Boolean, Boolean) メソッド (System.Windows.Forms) | Microsoft Docs
シャットダウンメニューを開いて SendKeys でキー操作する VBScript もあった。確かに「正規の休止状態」にする一番の正攻法かもしれないが、自動キー操作がウイルス扱いされかねないので微妙かしら。
今自分の PC がスリープ状態なのか休止状態なのかを見分ける方法は電源ランプでイケるようだが、自分の Galleria XG (デスクトップ PC) ではどちらも電源ランプが消えて区別がつかなかった。終了と再起動時の待ち時間も変わらなくてよく分かってない。よく分かってないけどとりあえずコレでいいやと思って前述のワンライナーに至る。
- Windowsのスリープと休止の違いとは?見分け方は? | Aprico
電源ランプが点滅していればスリープ・消灯していれば休止状態です。
また、復帰方法も違います。スリープではマウスを操作するかキーボードのキーを押すことで復帰しますが、休止状態では電源ボタンを押さないと復帰できません。
上述の記事等で登場した WSH・VBScript に関するメモ。
- 第5回 WshShellオブジェクトの詳細(1) : Windows管理者のためのWindows Script Host入門(2/4 ページ) - @IT
- Run メソッドの第2引数はウィンドウの表示状態を制御できる
- Run メソッドの第3引数は起動したプログラムの終了を待つか否か
- SendKeys (WshShell オブジェクト) - WSH@Workshop
- SendKeys メソッドで使う特殊キーのリスト
とりあえず以上。個人用途ならこんなんでいいわ。