Cette classe "CompteurProcessus" permet de contrôler le lancement, l'arrêt d'une application (quelconque) par un utilisateur de la machine, et d'en ressortir le temps d'utilisation de celle-ci.
Elle fonctionne à l'aide d'événements 'LancementApplication' et 'ArretApplication'
Source / Exemple :
using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace testClasseProcess
{
/*
Cette classe permet de contrôler l'utilisation d'une application en passant le nom
de son processus en paramètre
Elle possède des événements liés au démarrage de l'application (LancementApplication)
et à son arrêt (ArretApplication)
Elle nous informe de la durée d'utilisation de l'application
public class CompteurProcessus
{
private Thread threadProcessus; // thread qui va contenir la procédure de contrôle
private bool stop = false; // booleen qui permet ou non l'accès à la boucle de contrôle
private bool heureDebutBloquee = false; // bloquage de l'heure de lancement de l'application dans la boucle
private bool heureFinBloquee = true; // bloquage de l'heure d'arret de l'application dans la boucle
private DateTime heureDebut; // récupération de l'heure de lancement de l'appliation
private TimeSpan totalTemps; // tps total -> diff. entre heure de début et fin
private string nomApplication; // nom de l'application (processus) à surveiller
private int NombreProcessus; // nombre de processus actifs sur la machine
private decimal tpsUtilisation; // durée d'utilisation de l'application
// evennements de contrôle
public event EventHandler LancementApplication;
public event EventHandler ArretApplication;
public CompteurProcessus()
{
}
public decimal DureeLancement
{
get {return tpsUtilisation;}
}
public int NombreProcessusActifs
{
get {return NombreProcessus;}
}
public void Start(string nomProcessus)
{
nomApplication = nomProcessus;
threadProcessus = new Thread(new ThreadStart(ecouteProcessus));
threadProcessus.Start();
}
public void Stop()
{
threadProcessus.Abort();
threadProcessus = null;
}
private void ecouteProcessus()
{
while (!stop)
{
// récupération des processus actifs sur la machine dans tabProcess
Process[] tabProcess = Process.GetProcesses();
NombreProcessus = tabProcess.Length;
// initialisation du test d'activité du programme a controler (NomApplication)
bool actif = false;
// test d'activité
foreach (Process unProcessus in tabProcess)
{
// si il figure dans la liste -> il est actif
if (unProcessus.ProcessName.ToLower() == nomApplication.ToLower())
actif = true;
}
// si le programme tourne
if (actif)
{
// si il vient d'être lancé -> heure de début non bloquée
// (on entre qu'une seule fois dans cette boucle)
if (!heureDebutBloquee)
{
// on récupère l'heure de début
heureDebut = DateTime.Now;
// on bloque l'acces a cette boucle
heureDebutBloquee = true;
// on débloque l'acces a la boucle d'heure de fin
heureFinBloquee = false;
// evennement déclenché lorsque l'application démarre
LancementApplication(this,EventArgs.Empty);
}
}
// si le programme ne tourne pas (ou plus)
else
{
// si il était lancé et vient d'être arrêté
// (on entre qu'une seule fois dans cette boucle)
if (!heureFinBloquee)
{
// on calcule la différence entre l'heure du lancement et l'heure actuelle
totalTemps = DateTime.Now.Subtract(heureDebut);
// on bloque l'acces à cette boucle
heureFinBloquee = true;
// on débloque l'acces à la boucle d'heure du lancement
heureDebutBloquee = false;
// le temps de l'utilisation du programme (en secondes) est converti en decimal
tpsUtilisation = decimal.Round(Decimal.Parse(totalTemps.TotalSeconds.ToString()),0);
// evennement déclenché lorsque l'application s'arrête
ArretApplication(this,EventArgs.Empty);
}
}
}
}
}
}
Conclusion :
on récupère la durée d'utilisation sur lévennement 'ArretApplication' grace à la propriété 'DureeLancement'
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.