我在筆記型電腦上執行 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
因此,現在“雷鳥”和“某些程式”僅在筆記型電腦從電源線拔下時才在啟動時運行。為您提供更多資訊:
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
因此,在我的最終腳本中,我只檢查交流電源是否打開,無論電池是否正在充電或放電。 (來源:嘿,腳本專家!部落格 - 如何判斷筆記型電腦的電池是否耗盡?