私はラップトップで Windows 8.1 を実行していますが (これは問題ではありません)、次のように起動プロセスを変更できるかどうか疑問に思っています。
特定のプログラムは、電源に接続されているときのみ起動し、他のプログラムは、電源に接続されていないときのみ起動します。
これは可能ですか?可能であれば、どのようにすればいいですか?
答え1
これを行うサードパーティのユーティリティがあるかどうかはわかりませんが、Windows にはバッテリーの状態を監視するメカニズムが組み込まれています。良い点は、バッテリーに関する豊富な情報を利用できることです。悪い点は、まったく使いやすくないことです。
目的を達成するには、スクリプトを使用してアプリケーションを起動するのが良い方法です。以下にサンプルスクリプトを用意しました。メモ帳にコピーして貼り付け、必要に応じて調整し、.vbs拡張子のファイルとして保存します。動作するようになったら、スタートアップ グループなどにドロップできます。
注記:このスクリプトは10分で作ったものです。これで始められるはずですが、十分にテストしていません。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
そのため、最終的なスクリプトでは、バッテリーが充電中か放電中かに関係なく、AC 電源がオンになっているかどうかのみをチェックしました。(出典:Hey, Scripting Guy! ブログ - ラップトップ コンピューターがバッテリーで動作しているかどうかはどうすればわかりますか?