如何仅在笔记本电脑插入电源时启动项目

如何仅在笔记本电脑插入电源时启动项目

我在笔记本电脑上运行 Windows 8.1(但这没关系),想知道是否可以以以下方式修改启动过程:

某些程序仅在您插入电源时才会启动,而其他程序仅在您未插入电源时才会启动。

这可能吗?如果可以,怎么做?

答案1

我不知道是否有第三方实用程序可以做到这一点,但 Windows 确实有内置机制来监控电池状态。好消息是,它为您提供了大量有关电池的信息。坏消息是,它根本不容易使用。

实现目标的一个好方法是使用脚本来启动应用程序。我在下面编写了一个示例脚本。只需将其复制/粘贴到记事本中,根据需要进行调整,然后将其保存为扩展名为 .vbs 的文件。一旦您让它工作了,您就可以将它放入您的启动组或其他地方。

笔记:这个脚本是我在十分钟内编写的。它应该可以帮你入门,但我还没有彻底测试过。BatteryStatus 返回的值记录在此 MSDN 页面。您可能需要进行实验来查看在什么情况下会报告什么值。

Option Explicit

Const execApp1 = "application string goes here"
Const execApp2 = "example:   "c:\full\path\to.exe /arg1 /arg2"
Const execApp3 = "Use double quotes around things with spaces ""like so""."

Dim objShell :Set objShell = CreateObject("WScript.Shell")
Dim objWMI :Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
Dim objBatteries :Set objBatteries = objWMI.ExecQuery("SELECT * FROM Win32_Battery",,48)
Dim objBattery :Set objBattery = Nothing

Dim onACPower :onACPower = False

For Each objBattery in objBatteries
    If objItem.BatteryStatus = 2 Then   '2 is the value I got on a full battery. You may need to experiment with this.
        onACPower = True
    End If
Next

'Here's where you decide if you're on battery or AC and what to run in each case.
If onACPower = True Then objShell.Run execApp1, 0, False
If onACPower = False Then objShell.Run execApp2, 0, False
If onACPower = True Then objShell.Run execApp3, 0, False

答案2

感谢 Wes Sayeed 为我指明了正确的方向,这是最终的结果。但请注意,程序的运行方式可能与您的计算机上的运行方式不同,因为我使用它们作为示例,并且添加的任何语法可能与您所知道的程序没有任何关系......

Option Explicit

Const execApp1 = """C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"""
Const execApp2 = """C:\Users\MyProfile\AppData\Roaming\SomeProgram\bin\SomeProgram.exe"" /systemstartup"

Dim strComputer
strComputer = "."

Dim objShell :Set objShell = CreateObject("WScript.Shell")
Dim objWMIService :Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Dim colItems :Set colItems = objWMIService.ExecQuery("Select * From BatteryStatus Where Voltage > 0")
Dim objItem :Set objItem = Nothing

For Each objItem in colItems
'*    Wscript.Echo "On AC Power: " & objItem.PowerOnline
    If objItem.PowerOnline = "True" Then objShell.Run execApp1, 0, False
    If objItem.PowerOnline = "True" Then objShell.Run execApp2, 0, False
Next

因此,现在只有当笔记本电脑从电源线上拔下时,“thunderbird”和“someprogram”才会在启动时运行。以下是更多信息:

For Each objItem in colItems
    Wscript.Echo "Battery: " & objItem.InstanceName
    Wscript.Echo "On AC Power: " & objItem.PowerOnline
    Wscript.Echo "Battery is Discharging: " & objItem.Discharging
    Wscript.Echo "Battery is Charging: " & objItem.Charging
    Wscript.Echo "Remaining capacity: " & objItem.RemainingCapacity
Next

将为您提供更多信息...导致(拔掉电源时):

Battery: ACPI\PNP0C0A\1_0
On AC Power: False
Battery is Discharging: True
Battery is Charging: False
Remaining capacity: 41769

如果我们随后插入计算机并再次尝试该脚本,我们会得到类似如下的信息:

Battery: ACPI\PNP0C0A\1_0
On AC Power: True
Battery is Discharging: False
Battery is Charging: True
Remaining capacity: 42273

因此,在我的最终脚本中,我只检查交流电源是否打开,而不管电池是在充电还是放电。(来源:嗨,脚本小伙!博客 - 如何判断笔记本电脑是否使用电池供电?

相关内容