Ich verwende Windows 8.1 (aber das sollte keine Rolle spielen) auf einem Laptop und frage mich, ob es möglich wäre, den Startvorgang so zu ändern, dass:
Bestimmte Programme starten NUR, wenn Sie eingesteckt sind (Strom), und andere Programme starten NUR, wenn Sie NICHT eingesteckt sind.
Ist das möglich und wenn ja, wie?
Antwort1
Ich weiß nicht, ob es dafür Dienstprogramme von Drittanbietern gibt, aber Windows verfügt über integrierte Mechanismen zur Überwachung des Batteriestatus. Die gute Nachricht ist, dass Ihnen dadurch eine Fülle von Informationen über Ihre Batterie zur Verfügung steht. Die schlechte Nachricht ist, dass es Ihnen die Verwendung überhaupt nicht erleichtert.
Eine gute Möglichkeit, das gewünschte Ergebnis zu erzielen, ist die Verwendung eines Skripts zum Starten Ihrer Anwendungen. Ich habe unten ein Beispielskript erstellt. Kopieren Sie es einfach in Notepad, passen Sie es nach Belieben an und dannSpeichern Sie es als Datei mit der Erweiterung .vbs. Sobald es funktioniert, können Sie es in Ihrer Startgruppe oder wo auch immer ablegen.
NOTIZ:Dieses Skript habe ich in zehn Minuten zusammengebastelt. Es sollte Ihnen den Einstieg erleichtern, aber ich habe es nicht gründlich getestet. Die von BatteryStatus zurückgegebenen Werte sind dokumentiert unterdiese MSDN-Seite. Sie müssen möglicherweise experimentieren, um herauszufinden, welcher Wert unter welchen Umständen gemeldet wird.
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
Antwort2
Vielen Dank an Wes Sayeed, der mich in die richtige Richtung gelenkt hat. Hier ist das Endergebnis. Beachten Sie jedoch, dass die Programme möglicherweise nicht so ausgeführt werden wie auf Ihrem Computer, da ich diese als Beispiel verwendet habe und die hinzugefügte Syntax möglicherweise nichts mit den Programmen zu tun hat, wie Sie sie kennen ...
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
Jetzt werden „Thunderbird“ und „SomeProgram“ beim Start NUR ausgeführt, wenn der Laptop vom Stromkabel getrennt ist. Weitere Informationen:
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
gibt Ihnen weitere Informationen ... das Ergebnis (wenn nicht angeschlossen) lautet:
Battery: ACPI\PNP0C0A\1_0
On AC Power: False
Battery is Discharging: True
Battery is Charging: False
Remaining capacity: 41769
Und wenn wir den Computer anschließend anschließen und das Skript erneut versuchen, erhalten wir Informationen wie diese zurück:
Battery: ACPI\PNP0C0A\1_0
On AC Power: True
Battery is Discharging: False
Battery is Charging: True
Remaining capacity: 42273
Daher habe ich in meinem endgültigen Skript nur geprüft, ob die Stromversorgung eingeschaltet war, unabhängig davon, ob die Batterie geladen oder entladen wurde. (Quelle:Hey, Scripting Guy! Blog – Wie kann ich feststellen, ob ein Laptop mit Batterien läuft?