[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
<DllImport("user32.dll")> _
Shared Function GetLastInputInfo(ByRef plii As LASTINPUTINFO) As Boolean
End Function
[DllImport("user32.dll")]
static bool GetLastInputInfo(LASTINPUTINFO* plii);
Very useful to detect user-idle state of an application.
Minimum operating systems: Windows 2000
Compare to Environment.TickCount to get the time since the last user input.
These samples do not take into account the rollover of the tick counter which will occur after ~50 days of uptime.
This function retrieves the time in seconds since last user input
static uint GetLastInputTime()
{
uint idleTime = 0;
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf( lastInputInfo );
lastInputInfo.dwTime = 0;
uint envTicks = (uint)Environment.TickCount;
if ( GetLastInputInfo( ref lastInputInfo ) )
{
uint lastInputTick = lastInputInfo.dwTime;
idleTime = envTicks - lastInputTick;
}
return (( idleTime > 0 ) ? ( idleTime / 1000 ) : 0);
}
This function retrieves the time in seconds since last user input
Dim idletime As Integer
Dim lastInputInf As New LASTINPUTINFO()
Public Function GetLastInputTime() As Integer
idletime = 0
lastInputInf.cbSize = Marshal.SizeOf(lastInputInf)
lastInputInf.dwTime = 0
If GetLastInputInfo(lastInputInf) Then
idletime = Environment.TickCount - lastInputInf.dwTime
End If
If idletime > 0 Then
Return idletime / 1000
Else : Return 0
End If
End Function
This function retrieves the time in seconds since last user input
public: static double getSystemIdleTime()
{
int systemUptime = Environment::TickCount;
int idleTicks = 0;
LASTINPUTINFO lastInputInfo;
lastInputInfo.cbSize = (UInt32)Marshal::SizeOf(lastInputInfo);
lastInputInfo.dwTime = 0;
if (GetLastInputInfo(&lastInputInfo))
{
int lastInputTicks = (int)lastInputInfo.dwTime;
idleTicks = systemUptime - lastInputTicks;
}
return (( idleTicks > 0 ) ? ( idleTicks / 1000 ) : idleTicks );
}
Do you know one? Please contribute it!