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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 279 fois - Téléchargée 32 fois

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'

A voir également

Ajouter un commentaire

Commentaire

Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009

lol le code à l'air bien, mais utile, reste à prouver... Je suis toujours content de savoir le temps que j'ai passé sur une application :).. d'autant que si le prog plante, la donnée est perdu... je te met 9 car pour j'ai pas trouvé d'utilité ;)

Bonne prog.
Amicalement tmcuh

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.