e日記風 独り言

気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、パソコン技術やインターネット技術、プリンタやPCアプリからプログラム言語などに関連した記事です。
Access Counter:  総アクセス数
-1792- Powershell/スリープの抑止
この下、#1790 で 動画処理する PowerShellスクリプトで、長時間キーボード/マウス操作をしなかった場合でも Windowsがスリープ/休止に移行しない制御が壁に突き当たっていると書いた。
通常なら省電力を気にして PC操作を15分位しなかったは場合スリープ移行するように設定してあるが、動画のフォーマット変換をする場合15分では1本も変換できないでスリープに入ってしまっていることが多い。そこで通常は設定時間でスリープ移行するが、動画変換中だけは無制限に起こしておく、ということを実現するためのスクリプトだ。Webで検索すると方法はいくつか見つかるが、C#や VB.NETなどの特定の環境でのコードが載っているだけで、PowerShellですぐに使える形になってはいないので、それらを参考にしてアレコレ自分流に試したがどうしてもエラーが返ってきてしまう。
最終的には自力克服を諦めて Microsoft-technetのフォーラムに質問を投げてみた。さすがご本家! 数時間で回答があって見事解決。 以下がそのサンプルコード。
==========================================================================
$SystemRequired = [uint32]1
$Continuous = [uint32]"0x80000000"
$AwayMode = [uint32]"0x00000040"
$signature = @"
[DllImport("kernel32.dll")]
public extern static uint SetThreadExecutionState(uint esFlags);
"@
$func = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetThreadExecutionStateFunction" -passThru

Write-Host "Sleep 抑止"
$func::SetThreadExecutionState($SystemRequired -bor $Continuous -bor $AwayMode);
Read-Host -Prompt "Can you sleep?"
==========================================================================
実際にはこの後でスリープを許可するコードなどが必要になるが。
全体は別ページを立てる予定だが、何時になるか・・・・?

今日の写真は青空をバックにした冬薔薇。下を見ながら散歩していてふと気づくと頭上にハッとするくらい綺麗なコントラストがあった。さながら RGBの原色見本画像のようだ。
2016/12/04