I have the following code piece for a console application that I would like to lock my computer if the idle time exceed 5 seconds.
Problem: there is nothing happens after 5 seconds at all
public static uint GetIdleTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
GetLastInputInfo(ref lastInPut);
return ((uint)Environment.TickCount - lastInPut.dwTime);
}
public static long GetTickCount()
{
return Environment.TickCount;
}
public static long GetLastInputTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
if (!GetLastInputInfo(ref lastInPut))
{
throw new Exception(GetLastError().ToString());
}
return lastInPut.dwTime;
}
private static Timer timer;
private static uint idle = 0;
static void Main(string[] args)
{
timer = new Timer();
timer.Enabled = true;
timer.Interval = 1000;
timer.Start();
idle += GetIdleTime();
System.Threading.Thread.Sleep(6000);
if (idle > 5000)
{
LockWorkStation();
}
}
There are one or two strange things about your code.
The timer isn’t doing much, you are accumulating idle time, and you’re testing the idle time 6 seconds after you’ve calculated it without recalculating it.
Try This: