アイドル時に電源オプションを自動で省電力に変更する
最近暑くなって来たので電力制限フル開放の9900Kを使っていると部屋が熱くなります。
ということで起動してるけど特に使ってない時は省電力モードに、使ってる時は高パフォーマンスにしたいと思いました。
思いつく限りそんなオプションはデフォでなかった気がするのでスクリプトを組むことに。
1.次の3つのファイルを適当なディレクトリに置く。
toast.ps1
Function Toast { $AppId = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe" $null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] $null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] $xml = New-Object Windows.Data.Xml.Dom.XmlDocument $xml.LoadXml($template) [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($xml) } $args0 = $Args[0] $args1 = $Args[1] $template = @" <toast duration="$args0"> <visual> <binding template="ToastText02"> <text id="2">$args1</text> </binding> </visual> </toast> "@ Toast exit
powercfg_performance.bat
@echo off :main timeout 3 del %~dp0powercfg.lck if not exist %~dp0powercfg.lck ( powercfg -setactive SCHEME_MIN powershell %~dp0toast.ps1 short 電源オプションを高パフォーマンスに変更しました exit ) goto main
powercfg_powersave.bat
@echo off powercfg -setactive SCHEME_MAX cd %~dp0 start /min cmd /c powercfg_performance.bat powershell %~dp0toast.ps1 short 電源オプションを省電力に変更しました pause 3>>"%~dp0powercfg.lck"
2.タスクスケジューラでタスクを作成
ポイントはこのあたり
・ユーザがログオンしているかどうかにかかわらず実行する
これにしないと実行時にPowershellとかいろいろでてきて邪魔です
・次の間アイドル状態の場合のみタスクを開始する
1分にすると1分間マウス操作とかCPU負荷がなければアイドルと判定されるらしいです
・コンピュータがアイドル状態でなくなった場合は停止する
これ有効にしないと省電力から永久に復帰してくれません
3.結果
1分ぐらい操作しないと電源オプションが省電力に切り替わります。
操作すると高パフォーマンスに戻ります。
ついでに通知もでます。
電源オプションでCPU周波数は好きにいじれるので変えたかったら適当に変えてくれ。
参考
PowerShellでトースト通知やバルーンチップを扱う - 俺の外付けHDD
GPD Pocket : “超”省電力設定 – しかるのち
補足
- タスクスケジューラでアイドル判定になるとpowercfg_powersave.batが呼ばれる
- powercfg -setactive SCHEME_MAX で電源オプションを変更
- powercfg_performance.batを別窓で呼ぶ
- pause 3>>"%~dp0powercfg.lck" で同ディレクトリに powercfg.lck を作成し、共有ロックしたまま書き込めないようにする
- powercfg_performance.bat は powercfg.lck を削除できるまで(共有ロックが解除されるまで)無限ループ
- タスクスケジューラでアイドル状態が解除されるとpowercfg_powersave.batが強制停止される
- powercfg.lck が削除可能になり、powercfg_performance.batの処理が実行される
- powercfg -setactive SCHEME_MIN で電源オプションが高パフォーマンスに戻る
- 終わり
フラグファイルは気に入らないけどそこそこ簡単にできたのでまあいいんじゃないか