Buscar este blog

jueves, 13 de junio de 2013

Obteniendo el tiempo desde la ultima actividad del usuario en Windows

El API de Windows nos proporciona una función para determinar el tiempo desde la ultima actividad del usuario: GetLastInputInfo.
Para usarla en .Net es necesario importarla desde la dll nativa user32.dll:



[StructLayout(LayoutKind.Sequential)]
private struct LASTINPUTINFO {
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));
 
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 cbSize;
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
}
[DllImport("user32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

La función importada puede ser usada para obtener por ejemplo el total de minutos que ha estado inactiva la sesión, solo funciona para sesión en que fue llamada la función:


private double 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;
    }
    TimeSpan span = new TimeSpan(0, 0, 0, 0, (int)idleTime);
    return span.TotalMinutes;
}

Hasta la próxima!

No hay comentarios:

Publicar un comentario