Activités utilisateurs depuis Windows Service

Messages postés
25
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 août 2012
- - Dernière réponse : clavz40
Messages postés
25
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 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;
}

/LIST


Mon application fonctionne très bien si je la lance dans la session de l'utilisateur mais pas en tant que service !

je sèche un peu quelqu'un a une idée ?

Merci de votre aide
Afficher la suite 

2 réponses

Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
0
Merci
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
Commenter la réponse de theflayer
Messages postés
25
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 août 2012
0
Merci
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 !

Merci de ton aide
Commenter la réponse de clavz40