저는 노트북에서 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 전원이 켜져 있는지만 확인했습니다. (원천:안녕하세요, 스크립팅 가이! 블로그 - 노트북 컴퓨터의 배터리가 부족한지 어떻게 알 수 있나요?