C# 监控笔记本/平板的充电/电源状态

在平板/笔记本中,我们经常要基于主机是否在充电来做一些事情。比如当主机在充电时,需要通知外接键盘,键盘可以亮背景灯了;如果主机没充电,也要立即通知键盘,要键盘关闭背景等。

我们可以通过 ManagementEventWatcher 来创建一个电源监听事件解决这个问题,当事件到达时,再通过 GetSystemPowerStatus 来获取充电如否就可以了。大体代码如下:

// 判断是否正在充电的 API
[DllImport(@"kernel32.dll")] extern public static bool GetSystemPowerStatus(out PowerStatus batteryInfo);

// 定义监听事件代理
public delegate void DelegatePowerChanged(bool isPowerOn, int batteryLife);
public DelegatePowerChanged OnPowerChanged;

/// <summary>
/// 定义全局的对象,用于监听电源事件
/// </summary>
private System.Management.ManagementEventWatcher _localWatcher = null;


/// <summary>
/// 开始监听
/// </summary>
public void Start()
{
    if (_localWatcher != null) { return; }

    System.Management.WqlEventQuery query = new System.Management.WqlEventQuery("Win32_PowerManagementEvent");
    _localWatcher = new System.Management.ManagementEventWatcher(query);
    _localWatcher.EventArrived += new System.Management.EventArrivedEventHandler(MyEventHandler);
    _localWatcher.Start();
}

/// <summary>
/// 监听事件到达
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyEventHandler(Object sender, EventArrivedEventArgs e)
{
    if (OnPowerChanged == null) { return; }

    GetPowerStatus(out bool isPowerOn, out int batteryLife);
    OnPowerChanged(isPowerOn, batteryLife);
}

public static void GetPowerStatus(out bool isPowerOn, out int batteryLife)
{
    isPowerOn = false;
    batteryLife = 0;

    PowerStatus ps = default(PowerStatus);
    if (GetSystemPowerStatus(out ps))
    {
        isPowerOn = ps.ACLineStatus == 1;
        batteryLife = ps.BatteryLifePercent;
    } 
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值