2009-10-09 29 views

Respuesta

12

Puede utilizar estas funciones

ver este código, se debe añadir un temporizador al formulario, y establecer this.timer1.Enabled = true;

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace WindowsFormsApplication9 
{ 
    internal struct LASTINPUTINFO 
    { 
    public uint cbSize;  
    public uint dwTime; 
    } 

    public partial class Form1 : Form 
    { 

    [DllImport("User32.dll")] 
    public static extern bool LockWorkStation(); 
    [DllImport("User32.dll")] 
    private static extern bool GetLastInputInfo(ref LASTINPUTINFO Dummy); 
    [DllImport("Kernel32.dll")] 
    private static extern uint GetLastError(); 

public static uint GetIdleTime() 
{ 
    LASTINPUTINFO LastUserAction = new LASTINPUTINFO(); 
    LastUserAction.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(LastUserAction); 
    GetLastInputInfo(ref LastUserAction); 
    return ((uint)Environment.TickCount - LastUserAction.dwTime); 
} 

public static long GetTickCount() 
{ 
    return Environment.TickCount; 
} 

public static long GetLastInputTime() 
{ 
    LASTINPUTINFO LastUserAction = new LASTINPUTINFO(); 
    LastUserAction.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(LastUserAction); 
    if (!GetLastInputInfo(ref LastUserAction)) 
    { 
    throw new Exception(GetLastError().ToString()); 
    } 

    return LastUserAction.dwTime; 
} 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (GetIdleTime() > 10000) //10 secs, Time to wait before locking 
     LockWorkStation(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     timer1.Start(); 
    } 
    } 
} 
+0

¿Sabes cómo lograr la aplicación MVC? – alice7

+3

Esto detecta cuando el sistema como un todo está inactivo, no cuando una aplicación específica está inactiva. –

0

Establezca un tiempo de espera de carga, y cada vez que ocurra una acción "activa" (deberá conectarlos), reinicie el temporizador de nuevo al inicio.

+0

¿Hay alguna aplicación de muestra disponible? – Sauron

0

OMI la respuesta aceptada no es tan bueno como este método:

http://www.codeproject.com/Articles/30345/Application-Idle

El artículo CodeProject utiliza mensajes de Windows que hará que el componente tener en cuenta que la aplicación no ralentí, por ejemplo

public enum ActivityMessages : int 
{ 
    /// <summary> 
    /// Cursor moved while within the nonclient area. 
    /// </summary> 
    WM_NCMOUSEMOVE = 0x00A0, 
    /// <summary> 
    /// Mouse left button pressed while the cursor was within the nonclient area. 
    /// </summary> 
    WM_NCLBUTTONDOWN = 0x00A1, 
    /// <summary> 
    /// Mouse left button released while the cursor was within the nonclient area. 
    /// </summary> 
    WM_NCLBUTTONUP = 0x00A2, 
    /// <summary> 
Cuestiones relacionadas