GetLastInputInfo (user32)
Last changed: -70.130.76.223

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

VB Signature:

<DllImport("user32.dll")> _
Shared Function GetLastInputInfo(ByRef plii As LASTINPUTINFO) As Boolean
End Function

C++ Signature:

[DllImport("user32.dll")]
static bool GetLastInputInfo(LASTINPUTINFO* plii);

User-Defined Types:

LASTINPUTINFO

Notes:

Very usefull to detect user-idle state of an application.

Minimum operating systems: Windows 2000

Tips & Tricks:

Please add some!

Sample Code:

This function retrieves the time since last user input

    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 = lastInputInfo.dwTime;

        idleTime = envTicks - lastInputTick;
        }

        return (( idleTime > 0 ) ? ( idleTime / 1000 ) : idleTime );
    }

Sample Code vb.net:

This function retrieves the time 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

Sample Code C++ .net:

This function retrieves the time 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 );
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation