Ast*_*gas 7 c# events windows-8 batterylevel
我有一种确定电池电量的方法,并保留定时器以定期检查电池电量.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当电池电量下降或增加1%时,有没有办法注册事件?我已经注册了SystemEvents.PowerModeChanged并且工作正常.
简短的答案来自 .Net 基类库。
也就是说,有可用的电源事件,但这些事件驻留在 kernel32 中。Microsoft 确实尝试在 SystemEvents 类中为您提供对其中一些事件的挂钩,但不幸的是它们并没有与所有事件相关联。查看电源管理 API,没有一个事件可以按照您想要的方式跟踪电池。
电源事件: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373162( v=vs.85).aspx
电源管理服务有一个名为 GetSystemPowerStatus 的方法,可以为您提供所需的信息。如果您了解在 .Net 中使用 C++,您可以查询电池信息以及何时更改触发您自己的事件。
获取系统电源状态: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372693 (v=vs.85).aspx