clavz40
Messages postés25Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention17 août 2012
-
16 août 2012 à 20:22
clavz40
Messages postés25Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention17 août 2012
-
17 août 2012 à 10:34
Bonjour,
J'ai une application qui doit détecter la présence d'un utilisateur et effectuer une action (fermeture de session, ...) par exemple si ce dernier est absent pendant une période de 5min !
J'ai essayé avec :
[LIST=1]
[*]
Cursor.Position couplé avec 2 timers
[*]
[DllImport("kernel32.dll", SetLastError = true)]
static extern uint GetTickCount();
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
}
public static bool IsInputIdle(int idleTimeoutSecond)
{
LASTINPUTINFO LInInfo=new LASTINPUTINFO();
LInInfo.cbSize = LASTINPUTINFO.SizeOf;
if (GetLastInputInfo(ref LInInfo) == true)
{
bool test = (GetTickCount() - LInInfo.dwTime) > idleTimeoutSecond;
return (GetTickCount() - LInInfo.dwTime) > idleTimeoutSecond;
}
else
return false;
}
theflayer
Messages postés125Date d'inscriptiondimanche 28 février 2010StatutMembreDernière intervention21 juin 20152 17 août 2012 à 09:58
Salut,
Pas tout compris, tu veux veux fermer la session système d'un utilisateur ?
Ta quoi comme code pour l'instant ? (moi je vois pas afficher dans ton poste)
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
clavz40
Messages postés25Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention17 août 2012 17 août 2012 à 10:34
En effet, le code n'a pas été pris...
Pour être plus clair, j'ai un service Windows. J'aimerai que ce service détecte quand l'utilisateur n'est plus devant son ordinateur pour pouvoir après un laps de temps verrouiller sa session, ou lancer des applications gourmandes en ressources (3DS-Max)...)
Le problème est que j'ai réussi a faire cela avec le code suivant, mais uniquement si mon application est lancé dans la session de l'utilisateur. ça ne fonctionne plus dès que mon application est lancé en tant que service (via le compte système)
private void timerCurseur1_Tick(object sender, EventArgs e)
{
//Enregistre la position courante du curseur
Old_Point = Cursor.Position;
}
private void timerCurseur2_Tick(object sender, EventArgs e)
{
try
{
//Si la position relevé précedemment est identique à l'actuelle alors le curseur ne bouge plus
if (Old_Point == Cursor.Position)
{
....
OU
[DllImport("kernel32.dll", SetLastError = true)]
static extern uint GetTickCount();
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
}
public static bool IsInputIdle(int idleTimeoutSecond)
{
LASTINPUTINFO LInInfo=new LASTINPUTINFO();
LInInfo.cbSize = LASTINPUTINFO.SizeOf;
if (GetLastInputInfo(ref LInInfo) == true)
{
bool test = (GetTickCount() - LInInfo.dwTime) > idleTimeoutSecond;
return (GetTickCount() - LInInfo.dwTime) > idleTimeoutSecond;
}
else
return false;
}
En résumé, j'aimerai pouvoir récupérer l'activité de l'utilisateur via mon service !