6

バッテリーレベルを判断する方法があり、バッテリーレベルを定期的にチェックするタイマーを保持しています。

   void GetBatteryLevel()
    {
        try
        {
            //Use this code in next build
            //System.Windows.Forms.PowerStatus status = System.Windows.Forms.SystemInformation.PowerStatus;

            double batteryLevel;
            ManagementObjectSearcher mos = new ManagementObjectSearcher("select EstimatedChargeRemaining from Win32_Battery");
            ManagementObjectCollection collection = mos.Get();
            foreach (ManagementObject mo in collection)
            {
                UInt16 remainingPercent = (UInt16)mo["EstimatedChargeRemaining"];
                batteryLevel            = (double)remainingPercent;
                batteryLevel            = batteryLevel / 100;
                batteryLevel            = 1.0 - batteryLevel;
                BatteryLevel            = new System.Windows.Point(0.0, batteryLevel);
            }
        }
        catch (Exception exp)
        {
            Logger.LogMessage("EXCEPTION: " + exp.StackTrace);
        }
    }

バッテリー残量が 1% 減少または増加したときにイベントを登録する方法はありますか? 私は既に SystemEvents.PowerModeChanged に登録しており、正常に動作しています。

4

1 に答える 1

2

簡単な答えは、.Net 基本クラス ライブラリからのものです。

そうは言っても、利用可能な電源イベントがありますが、これらのイベントはkernel32にあります。Microsoft は、SystemEvents クラスのこれらのイベントのいくつかへのフックを提供しようとしましたが、残念ながら、それらはすべてのイベントに関連付けられているわけではありません。Power Management API を見ると、希望する方法でバッテリーを追跡するイベントはありません。

電源イベント: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373162(v=vs.85).aspx

Power Management Services には、必要な情報を取得する GetSystemPowerStatus というメソッドがあります。.Net 内から C++ を操作することを理解している場合は、バッテリー情報を照会し、それが変更されたときに独自のイベントを発生させることができます。

GetSystemPowerStatus: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372693(v=vs.85).aspx

于 2013-09-18T15:55:29.690 に答える