【问题标题】:How do I get notification of the battery power level from the Windows kernel?如何从 Windows 内核获取电池电量通知?
【发布时间】:2012-05-10 11:48:07
【问题描述】:

我需要用 C 语言编写代码,以便在笔记本电脑电池电量不足时指示并通知我。我知道我可以使用以下内容:

BOOL WINAPI GetSystemPowerStatus(
    __out  LPSYSTEM_POWER_STATUS lpSystemPowerStatus
    );

但我想向操作系统发送一个函数,当电量不足时会通知我。

我想在我的代码中有一个“空”循环,当电池电量不足时,代码会向我发送通知(printftrace)。

我想我应该使用内核函数,但我找不到它们

【问题讨论】:

  • Windows 什么时候允许内核编程?
  • @Shahbaz 在 Windows 上,“内核编程”基本上是“编写驱动程序”。但可能让您感到困惑的是the difference between the kernel and kernel mode。 Windows 确实导出了与在内核模式下运行无关的“内核”函数。
  • 您从哪里得知这需要涉及内核anything?打电话给GetSystemPowerStatus有什么问题?您的意思是您实际上希望操作系统在功率级别达到某些预定义点时回调您的代码?
  • 人们普遍认为内核由超酷且无所不能的方法组成。而“内核”本身的唯一目的就是让这些方法远离凡人。
  • @user1386966 驱动程序??什么司机?

标签: c windows winapi power-management


【解决方案1】:

我从未使用过这些 API,但您要查找的似乎是 WM_POWERBROADCAST

wParam 有多种值,您可以在收到该消息时检查它们,例如PBT_APMBATTERYLOW。当您收到带有适当wParam 值的WM_POWERBROADCAST 消息时,请从那里调用GetSystemPowerStatus()

【讨论】:

  • 谢谢,但这个 API 仅适用于桌面应用程序的问题。
  • @user1386966 是吗?在您的问题中,您在哪里提到了其他内容?您是否有一些没有告诉我们的沉默的秘密要求?
【解决方案2】:

在内核中,有一个单独的方法来处理电源状态更新。有关信息,请参阅here

如果您正在编写可能受电源状态影响的驱动程序 更改,您必须能够处理以下类型的 您的驱动程序代码中的信息:

等等

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2014-08-02
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多