1年1ケ月ぶりの投稿になりました。(誤記が在ったら御免なさい)
昨年のphp-web-socketサーバー稼動後、Webアプリ(jQuery、Ajax)で部門間の質問・回答システムを立ち上げ使っています。
このQAシステムを稼動開始後にPCがWindows-XPからWindows7に切り替わりました。
Windows7になってから午後になるとWeb-socketの連携が出来ず、ブラウザーを閉じて開きなおす使い方をしていました。
なんでだろー と色々と調べました。
スリープの仕組みがWindows7で大きく変わっていました。
XPではCPUの使用率でスリープするか判断されていて自動で画面更新(なでしこ)していればスリープしませんでした。
しかし、Windows7(Vista)から設定した時間になるとOSからアプリにスリープを通知しアプリからスリープ拒否が無ければスリープする。
と言う仕組みになっていました。(Vistaは使わないので知らんかった)
この事に気づくまでに8ケ月くらい掛かってました。
シマンテックのウイルスチェックでもスリープには逆らえず、お昼ねしてました。
つまり、OSがスリープします、と言えばスリープしちゃうのです。
悩んだあげくの対策はQAシステム(ブラウザー)を起動したら、スリープを解除しQAを閉じる時にスリープを再設定する。
この機能で離席が長引いてもスリープせず、スムーズな対応が取れる様になりました。
チョット横道にそれますが、このQAシステムはJavascriptとxxxxx.vbsを連携してSAP画面と連携するため、IE(ブラウザー)のスクリプトに関する設定を1箇所変更しています。
イントラネットに関する変更で会社のOKを確認して変更しました。
さて、スリープの解除と再設定ですが、コマンドプロンプトでテストしてから、VBSのコードを調べました。
VBSで設定するコードが複雑ですね。
デスクトップPCの例なのでdcの設定はしていません。
1、コマンドプロンプトから手入力(管理者権限で行う)
(1)スリープの解除
      powercfg -hibernate off
      powercfg -Change -standby-timeout-ac 0
(2)スリープの再設定(20分でスリープ)
      powercfg -hibernate on
      powercfg -Change -standby-timeout-ac 20
2、VBSのコード
Developer Network ・・・下記の事例を参考にしました。
http://social.msdn.microsoft.com/Forums/ja-JP/2c267632-4752-405f-bb5a-d0fb2db977fe/pcvbscript?forum=vbgeneralja
(1)スリープの解除
Const cPPLAN    = "Win32_PowerPlan"
Const cPSETDIDX = "Win32_PowerSettingDataIndex"
Const cCovcGUID2 = "{29f6c1db-86da-48c5-9fdb-f2b67b1f44da}"  '「次の時間が経過後スリープする」GUID
Const cCovcGUID3 = "{94ac6d29-73ce-41a6-809f-6363ba21b47e}"  '「ハイブリッドスリープを許可する」GUID
Const vYY = "\\"
'WMI名前空間の接続
Set oWmiSvPOW = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer("Localhost","root\cimv2\power")
'アクティブな電源プランを求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPPLAN & " WHERE IsActive = TRUE")
For Each oEACH In oClass
   SET oPPLAN =oEACH
   vPPLANGUID = MID(oEACH.InstanceID,Instr(oEACH.InstanceID,"{"),999)
NEXT
'「ハイブリッドスリープを許可する」の操作設定(AC電源) を求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPSETDIDX & " WHERE InstanceID LIKE '%" & vYY & vPPLANGUID3 & vYY & "AC" & vYY & cCovcGUID & "'"  )
For Each oEACH In oClass
   SET oPCOVC= oEACH
NEXT
'設定の変更
oPCOVC.SettingIndexValue = 0
oPCOVC.Put_
oPPLAN.Activate
'「次の時間が経過後スリープする」の操作設定(AC電源) を求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPSETDIDX & " WHERE InstanceID LIKE '%" & vYY & vPPLANGUID2 & vYY & "AC" & vYY & cCovcGUID & "'"  )
For Each oEACH In oClass
   SET oPCOVC= oEACH
NEXT
'設定の変更
oPCOVC.SettingIndexValue = 0
oPCOVC.Put_
oPPLAN.Activate
(2)スリープの再設定(20分でスリープ)
Const cPPLAN    = "Win32_PowerPlan"
Const cPSETDIDX = "Win32_PowerSettingDataIndex"
Const cCovcGUID2 = "{29f6c1db-86da-48c5-9fdb-f2b67b1f44da}"  '「次の時間が経過後スリープする」GUID
Const cCovcGUID3 = "{94ac6d29-73ce-41a6-809f-6363ba21b47e}"  '「ハイブリッドスリープを許可する」GUID
Const vYY = "\\"
'WMI名前空間の接続
Set oWmiSvPOW = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer("Localhost","root\cimv2\power")
'アクティブな電源プランを求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPPLAN & " WHERE IsActive = TRUE")
For Each oEACH In oClass
   SET oPPLAN =oEACH
   vPPLANGUID = MID(oEACH.InstanceID,Instr(oEACH.InstanceID,"{"),999)
NEXT
'「ハイブリッドスリープを許可する」の操作設定(AC電源) を求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPSETDIDX & " WHERE InstanceID LIKE '%" & vYY & vPPLANGUID3 & vYY & "AC" & vYY & cCovcGUID & "'"  )
For Each oEACH In oClass
   SET oPCOVC= oEACH
NEXT
'設定の変更
oPCOVC.SettingIndexValue = 1
oPCOVC.Put_
oPPLAN.Activate
'「次の時間が経過後スリープする」の操作設定(AC電源) を求める
SET oClass = oWmiSvPOW.ExecQuery("SELECT * FROM " & cPSETDIDX & " WHERE InstanceID LIKE '%" & vYY & vPPLANGUID2 & vYY & "AC" & vYY & cCovcGUID & "'"  )
For Each oEACH In oClass
   SET oPCOVC= oEACH
NEXT
'設定の変更
oPCOVC.SettingIndexValue = 1200
oPCOVC.Put_
oPPLAN.Activate
コードのタイプミスが有りましたら御免なさい。
以上です。
0 件のコメント:
コメントを投稿