Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPTEURPROCESSUS : CONTROLER LA DUREE D'UTILISATION D'UNE APPLICATION PAR SON PROCESSUS


Information sur la source

Catégorie :Applications Source .NET ( DotNet ) Classé sous : compteur, processus, utilisation, application Niveau : Initié Date de création : 08/03/2005 Vu : 5 350

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

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

  • 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);
  • }
  • }
  • }
  • }
  • }
  • }
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'
 

Commentaires et avis

signaler à un administrateur
Commentaire de tmcuh le 10/03/2005 09:09:40

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Ouverture multiple fichiers pr 1 seul processus [ par Blacknight91 ] Bl@cknightBonjour,J'ai une application pouvant recevoir en argument un chemin d'un fichier.J'ai fait l'association extension de fichier <-> mon Compteur de performance process ? [ par sahliali ] salut j'ai codé un code qui sert à tester si mon application est en cours d'exécution mais j'ai eu une exception qui me dit :"Impossibl Utilisation dll C/C++ en C# [ par garcimor59 ] Bonjour tout le monde,Bon voilà j'ai mon probleme : J'ai une DLL faite en C/C++, et j'aimerais pouvoir faire appelle à des fonctions contenus dans cet Controler le pointeur d'un processus afin d'écrire dans une application externe. [ par micam ] Bonjour, voici une petit problème pour les gros barbus du C#.Je chercher à écrire dans le focus depuis mon applicaiton C# qui tourne en tache de fond. Domaine d'application vs Processus [ par t00f ] Bonjour à tous, Je suis actuellement en train de réaliser une application perso et j'ai du mal à comprendre ce qu'est réellement un domaine d'applicat Utilisation dynamique de DLL. [ par t00f ] Bonjour à tous,Je me tourne vers vous pour avoir un conseil bien précis. Je cherche à développer une application qui peut être enrichie à l'aide de "p utilisation cpu par processus [ par Adidas2 ] Salut tous le mondeJe cherche à obtenir l'utilisation CPU de chaque processus lancé quelqu'un aurait une idée de la fonction à utiliser svp ?Langage : la fermeture d'une application qui lance plusieurs processus en C# [ par mounal ] Sltje veux savoir comment faire pr fermer une application C# qui lance plusieurs processus qui sont des fenetres qui s'ouvrent. quand je fais"applicat cacher le nom d'un processus dans le gestionnaire des tâches de windows [ par alexSot ] salut chers amis, je lance mon application que j'ai dénommé gestionNet et je voudrais pas qu'un utlisateur averti puisse aller arrêter l'application d communication avec une application java [ par BOULIST ] Boulj'ai une application c#, et je veut communiquer (interagire) avec une application java (console dos) .comment faire?j'ai aussi le code source d


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.