Compteurprocessus : controler la duree d'utilisation d'une application par son processus

Contenu du snippet

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.