有没有办法在电源事件上执行程序?

Rya*_*rle 11 laptop windows-7 battery power-management

我基本上是在寻找一种方法来在我的笔记本电脑转换为电池供电时执行应用程序,同样地,当它返回到交流电时。

Windows 或第三方应用程序中是否有内置挂钩可以响应此类事件?

编辑

我已经查看了 TaskScheduler 试图在“电源”事件上触发任务,但在切换到电池时似乎没有记录任何事件。

Rya*_*rle 8

我编写了一个应用程序 ( http://batterysaver.codeplex.com/ ),它将侦听电源模式更改消息并根据 XML 配置执行操作。

如果其他人可以使用它或扩展它,那就太棒了。如果有更好的,请留言。


Fox*_*loy 5

我喜欢 Bill 的方法,但他没有告诉您如何在 PowerShell 中注册 WMI 事件,因此以下是具体操作方法。

如果您希望代码仅在系统电源状态更改时触发(如此处所述),请使用此代码。

Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
 -sourceIdentifier "Power" `
 -action {
     #YourCodeHere
      }
Run Code Online (Sandbox Code Playgroud)

现在,只要电源状态发生变化,无论您插入还是拔出设备,都会触发此操作。所以你可能还想停下来问这个问题:

我是否有电?

幸运的是,我们可以通过 WMI Class 来做到这一点BatteryStatus,所以这是我用来仅在电源事件更改时运行操作的完整构造,并且仅当我不再使用电源时才运行操作。

Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
  -sourceIdentifier "Power" `
  -action {
      if ([BOOL](Get-WmiObject -Class BatteryStatus -Namespace root\wmi).PowerOnLine ){
         #Device is plugged in now, do this action
         write-host "Power on!"
     }
    else{
        #Device is NOT plugged in now, do this action
        write-host "Now on battery, locking..."
        [NativeMethods]::LockWorkStation()
     }
Run Code Online (Sandbox Code Playgroud)