[C#2008] OBSERVER L'ACTIVITÉ INPUT (CLAVIER SOURIS) DE L'UTILISATEUR
Djodjoman
Messages postés4Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention22 avril 2010
-
22 avril 2010 à 22:27
xavpiaf
Messages postés2Date d'inscriptiondimanche 12 février 2006StatutMembreDernière intervention12 décembre 2012
-
12 déc. 2012 à 15:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
xavpiaf
Messages postés2Date d'inscriptiondimanche 12 février 2006StatutMembreDernière intervention12 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és2Date d'inscriptiondimanche 12 février 2006StatutMembreDernière intervention12 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és4Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention22 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();
}
12 déc. 2012 à 15:47
mon probèmes maintenant c'eest que IdleWatch_CameBack()n'est jamais appelé. Faut-il préciser une fenêtre à tester?
12 déc. 2012 à 11:07
Je suis entrain de tester mais j'ai de sproblèmes de détection d'activitée et de timer.
22 avril 2010 à 22:27
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);
}
}
}