Расширяя комментарий Келтари, следующие циклы VBScript и каждую секунду сообщают, включен экран или нет.
Do WScript.Sleep 1000 WScript.Echo "Screen is on = " & ScreenOn Loop Function ScreenOn() Dim objWMIService, colItems, objItem On Error Resume Next Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor",,48) ScreenOn = False For Each objItem in colItems If objItem.Availability = 3 Then ScreenOn = True Exit For End If Next On Error Goto 0 End Function
Вы должны сохранить его (например, как screenstatus.vbs
) и запустить его из командной строки, используя cscript screenstatus.vbs
).
Если все идет хорошо, то «True» будет отображаться каждую секунду, а когда вы выключите экран, он переключится на «False». Вам, очевидно, нужно будет включить экран, чтобы проверить это дважды!
Предполагая, что все идет хорошо, вы можете изменить цикл вверху на что-то вроде:
If ScreenOn() = False Then ' Call command here to sleep computer End If
а затем запланируйте выполнение сценария на регулярной основе (например, каждые 15 минут).
Ваша машина не сразу перейдет в спящий режим, но выключится при следующем запуске сценария (который, как я привел в примере, будет через 15 минут).