PCの世界でも節電が最重要課題だ。
スリープ機能を使えば節電出来るのは判っているが、経験上スリープを使うと様々な不具合に見舞われる。
メーカー製ノートPC等はハード的に対応が進んでいて問題は出づらいだろうがデスクトップPCになるとまだまだ?
特に追加機器を接続していたりすると顕著に地雷を踏む。
私もこのご時世なのでスリープ設定をしてみた。
Windows7はスリープに入るのも戻るのも非常に素早く快適だ。
っと思っていたのもつかの間、やはり不具合はやってきた。
ロジクールマウスにアサインしている機能が効かなくなる。(結構以前からある問題のようだ)
しかもどの機能が効かなくなるかはその時々で違う。
ん~、日本のために我慢して使うかとも思ったのだが、ここらへんは作業効率にシビアに効いてくる部分なのでかなりストレスが溜まる。
調べてみるとSetPoint(ロジクールのマウスウェア)を再起動してやれば直るらしい。
それなら、スリープ復帰のイベントを拾って再起動してあげればOKじゃん。
という訳でWMIでそれっぽい物を探す。
すると、まさにそれっぽいWin32_PowerManagementEventなんてのがある。
PS>Get-WmiObject -List *power*
Name |
ネットでこいつを調べたところEventType=7がスリープ復帰(Resume)イベントらしい。
イベントの扱い方は以前PowerShell: ◆プロセスの開始終了を監視する(Register-WmiEvent、Get-Event)でやっているのでこいつを真似してスリープ復帰時にSetPointを再起動するスクリプトが以下である。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 | #requires -version 2.0 # # Sleep解除の監視 # $query = "Select * From Win32_PowerManagementEvent where EventType=7" Register-WmiEvent -query $query -sourceidentifier "Resume" try{ While($true){ $newEvent = Wait-Event $sp = Get-Process SetPoint $path = $sp.path $sp.Kill() Get-Event | Remove-Event & $path } } catch{ Write-Warning "以下のエラーが発生しました" $error[0] } finally{ #イベントを削除し購読をやめる Get-Event | Remove-Event Get-EventSubscriber | Unregister-Event } |
あとはこれを、スタートアップなりスケジューラなりで実行して上げれば良い。
私は、キックする起動ファイルを作りたくなかったのでタスクスケジューラに登録した。
引数は以下のように指定してみた。
-WindowStyle Hidden -file "D:\PS\Sleep解除の監視.ps1"
その後確かめてみたらSetPoint自体は最新(Ver6.20)にバージョンアップしたら不具合は直っていた(^^;
0 件のコメント:
コメントを投稿