Проверка простоя системы и перевод системы в состояние выхода через 5 минут (если никто не использует)
Есть ли что-нибудь, что обеспечивает бездействие системы? Мы хотим использовать C#, чтобы получить время простоя системы во всех сеансах и вывести машину из системы, если никто не использует машину в течение X минут.
есть идеи об этом.....
1 ответ
Если вы используете сервер терминалов, это можно сделать с помощью групповых политик или конфигурации служб терминалов.
Чтобы выйти из сеанса рабочего стола, вам понадобится программа, работающая в фоновом режиме (она не будет работать как системная служба, она должна выполняться как часть интерактивного сеанса), которая будет проверять время входа с помощью GetLastInputInfo
Позвони потом ExitWindowsEx
выйти из системы
class Program
{
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public UInt32 dwTime;
}
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ExitWindowsEx(uint uFlags, uint dwReason);
static void Main(string[] args)
{
bool running = true;
while (running)
{
if (GetLastInputTime() > 60 * 15) //15 min idle time
{
ExitWindowsEx(0, 0);
running = false;
}
Thread.Sleep(1000 * 60); //check once per min.
}
}
static int GetLastInputTime()
{
int idleTime = 0;
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = Marshal.SizeOf(lastInputInfo);
lastInputInfo.dwTime = 0;
int envTicks = Environment.TickCount;
if (GetLastInputInfo(ref lastInputInfo))
{
int lastInputTick = (int)lastInputInfo.dwTime;
idleTime = envTicks - lastInputTick;
}
return ((idleTime > 0) ? (idleTime / 1000) : 0);
}
}
Мне нужно было сделать это однажды, и у меня были проблемы с поиском источников, и это может помочь кому-то еще, кто задает вопрос такого рода. Так что, хотя я отвечаю, я не голосую по этому вопросу.
ОБНОВЛЕНИЕ: Вот методика, чтобы заставить это работать как сервис