2008-11-04

電源供給中の判別 その2

WifiInfoで「電力供給中は無線LANを自動切断しない方がいい」というご要望を頂きました。
 
電力供給中ってどうやって判定するんだっけ...と思ったのですが、よく考えると以前も同じような事をしていましたね。
「充電中かどうかはレジストリの監視で可能ですが満充電になると判定できなくなるので、GetSystemPowerStatusEx2()を使わないといけませんね」という話でした。
 
一方でアドエスやWILLCOM 03はUSB給電が可能で、この場合は HKLM\Drivers\USB\FunctionDrivers\UsbChargingで判定が可能です。
 
両方レジストリで判定できればRegistryNotifyCallback()で監視すればいいのですが、結局はいちいち問い合わせてやらないといけません。ちょっと面倒ですね。
static BOOL PowerIsSupplying()
{
    SYSTEM_POWER_STATUS_EX2 systemPowerStatus   = {0};
    DWORD                   dwUsbCharging       = 0;

    // AC電源
    if (0 == GetSystemPowerStatusEx2(&systemPowerStatus, sizeof(systemPowerStatus), TRUE)) {
        systemPowerStatus.ACLineStatus = AC_LINE_UNKNOWN;
    }
    if (AC_LINE_ONLINE == systemPowerStatus.ACLineStatus) {
        return TRUE;
    } else {
        // USB給電も調査
        if (S_OK != RegistryGetDWORD(
                HKEY_LOCAL_MACHINE                  ,
                _T("Drivers\\USB\\FunctionDrivers") ,
                 _T("UsbCharging")                  , // 0:無効 1:給電中
                &dwUsbCharging)) {
            dwUsbCharging = 0;
        }
        return (1 == dwUsbCharging);
    }
}

 
ところで、たった今このエントリを書きながら「充電台に乗せたらActiveSync開始するようなツール作れば便利かも」と閃きました。
似非クレイドルみたいで便利だと思うんですがどんなもんでしょうか?
 

2 件のコメント:

nmaeda さんのコメント...

「充電台に乗せたらActiveSync開始するようなツール作れば便利かも」

大賛成ですが、わたしは当面アドエスなので…… (03の次世代機でGPSが入らないかと期待しています)

kazuaki さんのコメント...

nmaedaさん こんばんは。

残念ながら「充電台に乗せたらBluetoothを有効にするのであとは自分でActiveSyncしてね」という大変微妙なものになってしまいました(笑

GPSは私も搭載して欲しいと思っています。
BluetoothのGPSは精度はいいのですが、測位に時間がかかりすぎます。
W-SIMの位置情報は速いのですが、通信しながら取得できないというのが問題ですね。

もしWindows Mobile 7を待たずにGPS搭載機種なんかが出たりしたら ものすごく悩みそうです。