[c#2008] observer l'activité input (clavier souris) de l'utilisateur

3/5 (3 avis)

Vue 6 807 fois - Téléchargée 515 fois


Description

Cette classe permet de récupérer à la demande le temps depuis lequel l'utilisateur est inactif, ou de récupérer les évènements

d'entrée / sortie en activité ainsi que d'agir au bout d'un seuil maximum prédéfini

Source / Exemple :


//Exemple d'utilisation
using System;
using System.Windows.Forms;

namespace IdleInput
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private InputInfos.ClsAfIdleInfos IdleWatch = null;

        private void Form2_Load(object sender, EventArgs e)
        {
            //instanciation ClsAfIdleInfos 
            IdleWatch = new InputInfos.ClsAfIdleInfos(20000, InputInfos.ClsAfIdleInfos.WatchingFrenquencyConstants.Fast);

            //events
            IdleWatch.CameBack += new InputInfos.EventHandler(IdleWatch_CameBack);
            IdleWatch.IdleExpired += new InputInfos.EventHandler(IdleWatch_IdleExpired);
            IdleWatch.IdleTick += new InputInfos.IdleTickEventHandler(IdleWatch_IdleTick);
        }

        private void IdleWatch_CameBack(object sender, EventArgs e)
        {
            Console.WriteLine("Activité détectée");
        }
        private void IdleWatch_IdleTick(object sender, InputInfos.IdleTickEventArgs e)
        {
            Console.WriteLine(String.Format("Utilisateur sans activité depuis {0} seconde(s)", e.ElapsedTime));
        }
        private void IdleWatch_IdleExpired(object sender, EventArgs e)
        {
            MessageBox.Show(String.Format("Fin de l'observation : {0} ms sans activité.", IdleWatch.GetIdleTimeSpan()));
            IdleWatch.Dispose();
            Application.Exit();
        }
    }
}

Conclusion :


Classe faite suite à une discussion sur VbFrance
ceci est ma première source CSharp aussi toute critique (expliquée) est la bienvenue ;)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
xavpiaf Messages postés 2 Date d'inscription dimanche 12 février 2006 Statut Membre Dernière intervention 12 décembre 2012
12 déc. 2012 à 15:47
Rebonjour,
mon probèmes maintenant c'eest que IdleWatch_CameBack()n'est jamais appelé. Faut-il préciser une fenêtre à tester?
xavpiaf Messages postés 2 Date d'inscription dimanche 12 février 2006 Statut Membre Dernière intervention 12 décembre 2012
12 déc. 2012 à 11:07
Bonjour, je voudrais savoir s'il est possible de créer un service à partir de cette classe.
Je suis entrain de tester mais j'ai de sproblèmes de détection d'activitée et de timer.
Djodjoman Messages postés 4 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 22:27
Bien codé et commenté, merci bien :)

Comme j'ai passé un peu de temps à refaire l'exemple présent dans la classe pour une utilisation WPF, je la dispose ici pour ceux que ça intéresse :

using System;
using System.Threading;
using System.ComponentModel;
using System.Windows.Threading;

namespace IdleInput
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private InputInfos.ClsAfIdleInfos IdleWatch = null;

private BackgroundWorker backgroundWorker1 = new BackgroundWorker();

#region "Thread pour Label"
private string mThreadText = string.Empty;

delegate void SetTextCallback(string text);
private void SetText(string sText)
{
if (richTextBox1.Dispatcher.CheckAccess())
{
// The calling thread owns the dispatcher, and hence the UI element
richTextBox1.AppendText(sText);
}
else
{
// Invokation required
SetTextCallback d = new SetTextCallback(SetText);
richTextBox1.Dispatcher.Invoke(d, new object[] { sText });
}
}
private void SetThreadText(string sText)
{
mThreadText = sText;
while (backgroundWorker1.IsBusy)
{
// Remplace Application.DoEvents();
Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new ThreadStart(delegate { })
);
}

backgroundWorker1.RunWorkerAsync();
}
#endregion

public Window1()
{
InitializeComponent();

//instanciation ClsAfIdleInfos
IdleWatch = new InputInfos.ClsAfIdleInfos(20000, InputInfos.ClsAfIdleInfos.WatchingFrenquencyConstants.Fast);

//events
IdleWatch.CameBack += new InputInfos.EventHandler(IdleWatch_CameBack);
IdleWatch.IdleExpired += new InputInfos.EventHandler(IdleWatch_IdleExpired);
IdleWatch.IdleTick += new InputInfos.IdleTickEventHandler(IdleWatch_IdleTick);

//backgroundWorker event
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}

private void IdleWatch_CameBack(object sender, EventArgs e)
{
SetThreadText("Activité détectée");
}
private void IdleWatch_IdleTick(object sender, InputInfos.IdleTickEventArgs e)
{
SetThreadText(String.Format("Utilisateur sans activité depuis {0} seconde(s)", e.ElapsedTime));
}
private void IdleWatch_IdleExpired(object sender, EventArgs e)
{
MessageBox.Show(String.Format("Fin de l'observation : {0} ms sans activité.", IdleWatch.GetIdleTimeSpan()));
IdleWatch.Dispose();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.SetText(mThreadText);
}
}
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.