جهت کمک به فرآیند جستجو، بهتره عنوان پست به انگلیسی نیز نوشته شود :

Get System Idle Time

struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}

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

public static uint GetIdleTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeO f(lastInPut);
GetLastInputInfo(ref lastInPut);

return ((uint)Environment.TickCount - lastInPut.dwTime);
}
مثالی از نحوه ی استفاده :
private Timer CheckIdleTimer;

private void Form1_Load(object sender, System.EventArgs e)
{
CheckIdleTimer = new Timer();
CheckIdleTimer.Interval = 1000;
CheckIdleTimer.Start();
CheckIdleTimer.Tick += new EventHandler(CheckIdleTimer_Tick);
}

private void CheckIdleTimer_Tick(object sender, System.EventArgs e)
{
this.Text = (GetIdleTime() / 1000).ToString();
}

با استفاده از : http://www.codeproject.com/KB/cs/GetIdleTimeWithCS.aspx