Войти

Показать полную графическую версию : Бездействие всех пользователей на windows 7


KingShift
14-04-2018, 15:23
Добрый день, нужно реализовать отключение компьютера через 1 час бездействия в конце рабочего дня. Занес в планировщик на запуск от имени администратора, так как эта УЗ может входить в качестве пакетного задания. Иначе код не будет выполнятся если выйти из системы.


#include <Date.au3>
$idlesec = 3600000
Local $aRet, $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

Do
Sleep(200)
$iSave = DllStructGetData ($LastInputInfo, 2)
DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
$aRet = DllCall ("kernel32.dll", "long", "GetTickCount")
Until ($aRet[0] - $iSave) > $idlesec

ConsoleWrite (_Now () & ' Выключение компьютера.' & @CRLF)
;Shutdown(1)


Беда в том, что он отслеживает бездействие УЗ администратора, а не пользователя(то есть УЗ которая его запустила). А нужно чтоб отслеживал время бездействия(движение мыши, нажатия клавиатуры) всех пользователей. Как это реализовать?

Iska
14-04-2018, 16:19
KingShift, а чем не устраивает тот же самый Планировщик с условием запуска задачи при простое машины?

ShaddyR
15-04-2018, 03:32
Iska, видимо, вопрос отсчета времени. Когда-то была аналогичная идея - перезагружать сервер в конце рабочего дня через N минут после затихания последнего пользователя, но реализовывал в cmd и на чем-то застопорился. Так что если будут мысли, как реализовать - может и реанимирую идею.

Казбек
15-04-2018, 10:32
Iska,

Там же все равно это задание нужно привязывать к конкретному времени. Например, ставите запуск в 6 вечера и срабатывает он только если компьютер в простое заданное количество времени. К тому же, там есть пункт wait for idle и максимум можно задать два часа. Короче, у вас промежуток запуска максимум 1 час 59 минут. Если примерно в это время и происходит бездействие вашего пользователя - тогда ок. Если нет, то вам нужно создавать таких задач несколько, чтобы покрыть больший промежуток.
Почитайте (https://superuser.com/questions/777488/task-scheduler-what-is-wait-for-idle-for), там как раз эти два пункта и обсуждаются. Подозреваю, что об этом и говорится в предыдущем сообщении:
видимо, вопрос отсчета времени. »




© OSzone.net 2001-2012