2011-03-09 12 views
9

Necesito crear un programa que supervise la actividad de una computadora. Como un movimiento del mouse, clic del mouse o entrada de teclado. No necesito registrar lo que sucedió solo porque la computadora está en uso. Si su computadora no ha estado en uso por un cierto período de tiempo, es decir, 15 minutos, necesito disparar un evento.Detección de actividad de usuario

¿Hay alguna forma de que me notifiquen estos eventos?

Respuesta

8

Comprobar this article que puede obtener el tiempo de inactividad del equipo y, a continuación, se dispararía su evento en una condición arbitraria.

pseudo-código:

If Computer_is_Idle > 15 minutes Then 
    Do this 
Else 
    Do that or Wait more... 

Nota: Código fuente disponible dentro del artículo.

0

Debe establecer un gancho de teclado global y un gancho de mouse global. Esto dará como resultado que toda la actividad del teclado y el mouse pase a su aplicación. Puede recordar la hora del último evento y verificar periódicamente si ha transcurrido más de su ejemplo 15 minutos desde ese momento.

Tome una mirada here para un proyecto de ejemplo. También puede encontrar this útil.

+1

Las soluciones basadas en GetLastInputInfo son generalmente mejores, ya que no requiere la inyección de gancho codificar en cada proceso. –

6

Gracias LordCover. Este código es de here. Esta clase toma el control de los controles del teclado y el mouse por ti. Se puede utilizar en un temporizador de la siguiente manera:

private void timer1_Tick(object sender, EventArgs e) 
     { 
      listBox1.Items.Add(Win32.GetIdleTime().ToString()); 
      if (Win32.GetIdleTime() > 60000) //1minute 
      { 
       textBox1.Text = "SLEEPING NOW"; 
      } 
} 

// CÓDIGO PRINCIPAL PARA EL CONTROL, pegar en el código del formulario

internal struct LASTINPUTINFO 
{ 
    public uint cbSize; 
    public uint dwTime; 
} 
public class Win32 
{ 
    [DllImport("User32.dll")] 
    public static extern bool LockWorkStation(); 

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

    [DllImport("Kernel32.dll")] 
    private static extern uint GetLastError(); 

    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; 
    } 


} 
Cuestiones relacionadas