2008-01-28

サスペンドさせる方法

Use10Keyはv1.0からサスペンドへの移行方法を変更しています。
 
これまでは SetSystemPowerState()を使って強制的にサスペンドに移行していました。
// 強制的にサスペンド
SetSystemPowerState(NULL, POWER_STATE_SUSPEND, 0);
 
ところがこの方法だと 以前にも書いているようにサスペンド中に電話を受けて切断したときに連続して電話を受けられないという不具合がありました。
そこでv1.0からはレジストリの値を変更することで標準機能を使ってサスペンドに移行するようにしています。
// サスペンドタイマを変更
if ((S_OK == RegistrySetDWORD(
        HKEY_LOCAL_MACHINE                                          ,
        _T("System\\CurrentControlSet\\Control\\Power\\Timeouts")   ,
        _T("ACSuspendTimeout")                                      ,
        10)) && 
    (S_OK == RegistrySetDWORD(
        HKEY_LOCAL_MACHINE                                          ,
        _T("System\\CurrentControlSet\\Control\\Power\\Timeouts")   ,
        _T("BattSuspendTimeout")                                    ,
         10))
) {
    HANDLE hEvent = CreateEvent(
        NULL  ,
        FALSE ,
        FALSE ,
        _T("PowerManager/ReloadActivityTimeouts"));
    if (hEvent) {
        SetEvent(hEvent);
        CloseHandle(hEvent);
        hEvent = NULL;
    }
}
 
この方法でサスペンド中の電話の問題は無くなったのですが、新たにサスペンド中にリセットしてしまった場合にタイマが10秒になったままになるという問題が発生しています。
その他にも何故かサスペンド中にUSBケーブルを接続すると画面の点滅を数回繰り返すようになってしまいました。
 
前者は変更前のタイマの値を保存しておいて Use10Keyの再実行時に戻すような仕組みにしようと思っていますが、後者はまだ原因が分かっていません。
 
でも、それよりも気になるのが そもそもKeyLockSuspenderではサスペンド中の電話も正しく処理できているという事です。
これまで試した以外にもサスペンドさせるいい方法があるのかもしれませんね。
 

0 件のコメント: