comprennent les espaces de noms suivants
using System;
using System.Runtime.InteropServices;
puis inclure ci-dessous
internal struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
/// <summary>
/// Helps to find the idle time, (in milliseconds) spent since the last user input
/// </summary>
public class IdleTimeFinder
{
[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);
}
/// <summary>
/// Get the Last input time in milliseconds
/// </summary>
/// <returns></returns>
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;
}
}
Pour convertir la tickcount en temps, vous pouvez utiliser
TimeSpan timespent = TimeSpan.FromMilliseconds(ticks);
Remarque. Cette routine utilise le terme TickCount mais les valeurs sont en millisecondes et ne sont donc pas les mêmes que Ticks.
De MSDN article on Environment.TickCount
Retourne le nombre de millisecondes écoulées depuis le démarrage du système.
Parfait, je vous remercie. – GenericTypeTea
+1 pour PInvoke.net - Je ne connaissais pas cette ressource jusqu'à maintenant. –
ne fonctionne pas pour les écrans tactiles sans l'activité de la souris et du clavier – Smith