begin process at 2012 05 27 20:51:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > TASKMANAGER

TASKMANAGER


 Information sur la source

Note :
9,71 / 10 - par 7 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :06/08/2003 Date de mise à jour :18/08/2003 12:41:52 Vu / téléchargé :10 695 / 803

Auteur : Xentor609

Ecrire un message privé
Site perso
Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Explication :
TaskManager est un gestionnaire des tâches comme taskmgr.
Il affiche tous les processus en cours dans une ListView, avec le chemin d'accès, le nombre de threads, l'ID et l'icone de chaque processus.
Il se rafraichit automatiquement et il y a une option pour mettre la fenêtre en TOPMOST (Toujours visible).
Il peut aussi terminer un processus.
Attention, TaskManager peut terminer un processus système critique, comme "csrss.exe". Donc vous pouvez le killer mais à vos risques et périls.

Détails :
- ListView
- Reconnaissance des icones de fichiers en fonction de l'extension(cf. la source de JackosKing : http://www.cppfrance.com/article.aspx?Val=2043)
- Utilisation des Process et des Modules (Merci une fois de plus à BruNews)

A faire :
- Corriger tout d'abord tous les énormes bugs !!!
- Possibilité de réduire l'application dans la barre des tâches (dès qu'il n'y aura plus de bugs).
- Peut-être rajouter d'autres informations comme la mémoire utilisée par un processus, tous les modules associés à ce processus...
- Si vous avez des propositions, n'hésitez pas!

Bugs connus :
- TaskManager provoque des erreurs sur d'autres applications lors de leurs exécutions (au lancement). C'est aléatoire. Par exemple, TaskManager est en exécution, on appelle Microsoft Word, et on a le message d'erreur suivant :

WINWORD.EXE - Erreur d'application
L'application n'a pas réussi à s'initialiser correctement (0xc0000142).
Cliquez sur OK pour arrêter l'application.

Ensuite on appuie sur OK et un autre message d'erreur apparait :

WINWORD.EXE - Erreur d'application
L'instruction à "0x0095746a" emploie l'adresse mémoire "0x0095746a". La mémoire ne peut pas être "read".
Cliquez sur OK pour terminer le programme.

Ensuite on peut rappeller le même programme et ca marche sans problème. Ces messages ne s'affichent pas que pour Word mais aussi pour d'autres applications.

- On a déjà eu un autre type de message d'erreur mais cette fois-ci que pour Windows Messenger. Ce message s'affiche pendant l'exécution de Messenger :

MSMSGS.EXE - Erreur d'application
L'exception Pas à pas
Une exécution en pas à pas ou une trace vient de se terminer.
(0x80000004) s'est produite dans l'application à l'emplacement 0x0013f172.
Cliquez sur OK pour terminer le programme.

- Les 2 derniers bugs se produisent aussi bien en debug qu'en release. Mais ce bug là ne se produit qu'en release : dès qu'on appelle Calc.exe (le calculatrice de Windows), TaskManager plante. Il affiche :

TaskManager.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.

Et là on a le choix entre "Débogage", "Envoyer le rapport d'erreurs" et "Ne pas envoyer". Par contre, si la Calculatrice est appelé avant TaskManager, il n'y a pas ce problème. Ce bug n'apparaît que pendant l'exécution de TaskManager.

OS/Compilateur :
- testé sur Windows XP
- Compilé sous VC6

Remarques :
- Comme vous l'aurez remarqué, on a beaucoup de bugs qu'on n'arrive pas encore à résoudre. Donc si certains auraient les mêmes erreurs que nous, ou d'autres erreurs dont nous n'avons pas eu le "plaisir de découvrir", ou sinon qu'ils savent d'où viendrait le problème, laissez-nous vos commentaires. Merci d'avance pour votre aide.
- Projet réalisé par Xentor609 et Phoenix72.
- Faites nous part de vos commentaires à phoenix_darkspirit@hotmail.com et/ou xentor_609@hotmail.com

// ********************** MAJ **************************
Corriger :
- Le dernier bug, celui avec la Calculatrice, a été corrigé par BruNews (Merci beaucoup).
- La gestion des imagelist a été amélioré, car l'imagelist gardait toutes les icones (même ceux dont les processus étaient terminés)

Remarques :
- Un style a été rajouté (LVS_EX_FULLROWSELECT) par BruNews (encore merci)
- Les deux autres bugs apparaissent toujours de temps à autre, mais j'ai trouvé à quelle ligne il bloque (du moins pour le 1er bug) : dans GetTaskList(...), à la ligne : hProcessSnapME = CreateToolhelp32Snapshot(TH32CS_SNAPALL,pe32.th32P rocessID);
Il se bloque avec KERNEL32 mais on sait pas du tout pourquoi.
Si quelqu'un saurait comment résoudre cette erreur, laissez-nous vos commentaires.

// ********************** MAJ **************************
Corriger :
- Tous les bugs ont été corrigés.

Amélioration :
- Un menu a été ajouté.
- Possibilité de réduire l'application dans la barre des tâches
- Possibilité d'appeler le programme en mode silence (TaskManager.exe -s)
- Utilisation des mutex pour savoir si l'application a été déjà appelée (cf. la source de Kaid)
- Amélioration de la gestion entre la listview et les process
- Amélioration de la gestion de l'imagelist (merci à Kaid)

Remerciements :
- On remercie BruNews et Anacr0x pour leur aide, sans oublier Kaid pour l'imagelist (cf. le commentaire sur eXPlorer)

Remarques :
- Si quelqu'un aurait le moindre bug à signaler ou un idée à mettre en oeuvre, laissez-nous vos commentaires.
- Projet réalisé par Xentor609 et Phoenix72.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CONVERSION BMP <-> JPEG AVEC LIBRAIRIE CXIMAGE
Source avec Zip Source avec une capture CONTROLE D'UN PC A DISTANCE AVEC UNE TELECOMMANDE INFRAROUGE...
Source avec Zip Source avec une capture WINDOW CONTROL
Source avec Zip Source avec une capture DECRYPTEUR DE FICHIER GKF
Source avec Zip Source avec une capture MSGBOX

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

Commentaires et avis

Commentaire de BruNews le 06/08/2003 14:36:50 administrateur CS

#include &lt;string&gt;
using namespace std;
T'avais vraiment besoin de ces horreurs ?
Dans AddProcessList(...) tu fais 4 allocs sur temp, quand tu liberes ?
Pour l'instant j'en suis la, je nettoie tout cela, reste a suivre.

Commentaire de Xentor609 le 06/08/2003 18:34:01

Salut,
pour ce qui est des "string", tu as tout a fait raison, mais ca c'est juste une question de "facilité",et que je suis en ce moment occupe sur un autre projet. Mais je compte bien faire une MAJ avec corrections de certains bugs et elimination de string au profit des bons vieux "char".
Pour l'alloc sur temp, c'est juste un oubli, merci de l'avoir remarque.

Commentaire de BruNews le 06/08/2003 19:02:31 administrateur CS

int VerWindowsNT()
{
  OSVERSIONINFO osvi;
  osvi.dwPlatformId = 0; // unique membre qui nous interesse ici
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&osvi);
  return (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT);
}

et remplace aussi comme cela qui est bien suffisant si on a juste besoin de savoir type NT ou non.

Commentaire de Xentor609 le 08/08/2003 08:54:16

En ce qui concerne le style (LVS_EX_FULLROWSELECT), il y a un petit détail qui me gene : il y a un espace vide à la fin de la listview. Est-ce qu'il y aurait un moyen de l'enlever ?

Commentaire de Anacr0x le 11/08/2003 22:45:11

trè bon programme (qui plus est très pratique) ! de plus, chez moi, aucun bug a signaler, que ce soit avec word (contrairement a ce ke tu dit au dessus) ou n'importe quel autres logiciels... peut etr a tu un conflit logiciel ?

Commentaire de Xentor609 le 12/08/2003 16:38:43

salut Anacr0x!
Tout d'abord, merci de m'avoir répondu! Je commençais à désespèrer!
Pour les bugs, c'est aléatoire, donc ca peut se produire n'importe quand avec n'importe quel programme (j'en ai déjà eu avec Windows Media Player et pleins d'autres).
Ce que je fais pour tester, j'appelle TaskManager, je le réduis, j'appelle pleins de programmes et généralement, j'ai le message d'erreur.
J'ai testé ce programme sur pas mal de machines (pour voir si les bugs n'apparaissaient que sur mon ordi) et sur tous les PC testés, le bug est apparu.
A première vue, tu serais le "seul" (peut-être d'autres n'ont pas ces bugs là, mais à part toi, je n'en connais pas) avec qui le programme fonctionne sans problème.
En ce qui concerne le conflit logiciel, je pense pas que le problème vient de là, mais c'est possible.
Est-ce que tu pourrais réessayer le programme pour confirmer qu'il marche sans problème chez toi? D'avance merci.
Xentor609

Commentaire de Anacr0x le 12/08/2003 19:08:24

Excuse moi, mais tu as raison, j'ai fait 2 autres test, la premiere fois, il a quand meme falu que j'ouvre plus de 15 logiciel en meme tps, et la deuxieme seulement 5. Je pense qu'il s'agit de la fonction de rafraichissement automatique qui bug (je n'ai pas encore regardé le code, mais peut etre qu'en métant une temporisation...)

Commentaire de Xentor609 le 16/08/2003 11:51:09

Est-ce que tu pourrais préciser ton idée ? Mettre une tempo, ok mais où? D'avance merci.
Xentor609

Commentaire de BruNews le 16/08/2003 11:59:16 administrateur CS

Je pense juste avant ceci:
hProcessSnapME = CreateToolhelp32Snapshot(...)
seulement si est une nouvelle tache.
Vitesse de rafaichissement a 1 seconde ne suffirait pas ?

Commentaire de BruNews le 16/08/2003 12:09:43 administrateur CS

Salut les obsedes du codage (hi hi hi...),
5 jours de campagne m'ont engourdi les neurones.
J'oubliais un truc que je voulais te dire Xentor609, les list(View) prennent un lParam en 32 bits pour stocker une valeur par item. Ne serait pas mieux que de reconvertir la valeur litterale comme est fait dans GetListItemTextId() ?

Commentaire de Anacr0x le 16/08/2003 14:41:20

Bon, je clarifie un peu mes pensée... Ce qu'il y a d'étonant dans ton programme, c'est qu'il fait planté les autres, et pas le tiens, j'en déduis donc qu'ils essayent d'écrire dans une partie que tu est en train de lire ou écrire et ca bloque (je peut me gourré aussi), donc en mettant une temporisation dans ta boucle ProcessListView au bon endroit peut etre que ca marchera... Le probleme c'est qu'une temporisation entrainera un problème d'afichage, il faut donc en faire un thread, g modifié tt ca mais j'en suis arrivé a un autre problème, comment passé deux argument a un thread (je ne sais en mettre qu'un) ? Si vous croyez que je me trompe totalement, dite le moi tt de suite, ca m'évitera de cherché pour rien (^_^)

Commentaire de BruNews le 16/08/2003 20:07:58 administrateur CS

Anacr0x, on passe 200000000000 args a un thread si on veut. Je ne suis pas le seul victime de la chaleur. Un pointeur sur une structure et voila le prob du nbr de params resolu.

Commentaire de Anacr0x le 16/08/2003 21:26:16

Dsl Xentor, mé je croi ke mon aide va s'arrété la, g trop de mal avec les structures et malgré mes efforts, ya plin d'erreur de compilation, peut etre est tu plus doué que moi la dessus... De plus, j'ai des doutes quands au résultats.. Enfin, si tu veu, je peut te montré ce ke j'ai fé (ca te sera sans doute pas trè utile)

Commentaire de BruNews le 16/08/2003 21:38:37 administrateur CS

typedef struct _TOTHREAD {
HWND h1;
HWND h2;
long l1;
long l2;
} TOTHREAD, *LPTOTHREAD;

TOTHREAD tothrd;
initialise les membres quand besoin;
decalare ta func de thread normal ou (idem):
DWORD WINAPI MonThread(LPTOTHREAD pparm);
Appel de CreateThread ne change pas.

Commentaire de Anacr0x le 17/08/2003 01:16:14

Bon ben g reussi a tt threadé mais rien a faire ca ne marche pas commen je le veu... Pourtant je suis presk sur qu'en réduisant la vitesse du rafraichissement automatik a 1 seconde on gagne et en ressource et en stabilité... A vrai dire, tu conné et compren mieu ton code que moi donc je vais te laissé le faire, t'aura ptet plus de chance (et pi c ton programme après tt (^_^) )
Si t'as un quelconque problème, n'hésite pas a demandé (on sé jamais, jpourré peut-etre connaitre la réponse...)

BruNews, je croi ke tu as raison, la chaleur m'atteint sérieusement, j'arrive a rien en ce moment ;) Et pi en plus, j'ai mem pas encore commencé a testé le sous-classement, fodré ke jmy mette quand j'auré plus de tps

Commentaire de Xentor609 le 17/08/2003 12:58:38

salut!
Tout d'abord merci pour vos commentaires!
Dès le départ, j'ai pensé que le rafraichissement automatique à 1 seconde réglerait le problème mais ca ne changait rien. J'ai même essayé de mettre des Sleep un peu partout mais sans résultat.
J'ai essayé toutes vos propositions, mais une fois de plus, le problème reste toujours présent.
Mais j'ai modifié le code, et ça a l'air de marcher sans problème.
Je voudrais avant de poster sur CPPFrance, vous envoyer le programme (enfin si vous êtes d'accord bien sûr), afin d'avoir votre avis et aussi savoir si le programme fonctionne sans problème chez vous ! D'avance merci.
Xentor609

Commentaire de BruNews le 17/08/2003 13:04:25 administrateur CS

Poste quand tu veux.

Commentaire de Anacr0x le 18/08/2003 21:28:14

aucun pb, envoi sur Anacr0x@yahoo.fr si tu veu

Commentaire de Anacr0x le 18/08/2003 22:00:37

dsl, jsui 2 de tens, la source a déja été mise a jour (^_^)
Aucun pb ds la nouvelle version, bravo

Commentaire de BruNews le 18/08/2003 22:09:24 administrateur CS

NICKEL !!! A utiliser sans moderation.

Commentaire de Anacr0x le 19/08/2003 15:28:52

juste une petite idée comme ca, tu pourait rajouté un systeme pour arrété un process par ligne de commande. Ca permettrait de pouvoir faire un petit raccourci qui ferme automatiquement un (ou plusieur process) en meme tps (du genre TaskManager.exe -WINWORD.exe)

Commentaire de Xentor609 le 19/08/2003 19:25:05

L'idee est bonne. Je pourrais bien en faire ma MAJ, ca serait vraiment intéressant. Pour le moment, je suis occupe par d'autres projets, mais des que j'ai un temps, je m'en occuperais. C'est promis!
Merci encore pour l'idée!

Commentaire de moga le 09/04/2004 20:21:37

Alors tout simplement bravo;
voila qlq temps deja que je cherche un code reprenant la gestion de processus; mais alors carrement un taskmanager je suis comblé...

Je te remercie du fond du coeur pour cette source ;p
Seul souci je suis debutant ca va etre chaud de tout comprendre eheh

enfin bon coté idée j'en une pitite : ce serai de pouvoir checker automatiquement a intervale regulier qu'un processus (ou meme une liste) ne soit pas en route et de pouvoir le killer automatiquement...

Bon j avoue tout je cherche en fait a faire un prog pour buter la mule, et autre p2p que mon frangin met en route intepestivement et qui bouffent la bande passante de tout le monde.
Seulement il faut pas qu il s en rende trop compte sinon ca va bouder je prefere qu il croit simplement que son prog marche pas des masses

Bon encore merci ++

Commentaire de Xentor609 le 09/06/2004 19:05:18

Salut moga!
Pour pouvoir killer, il suffit de lister les processus, en fonction du nom du processus ou du chemin d'accès tu auras son ID et ensuite tu le kill. Tu peux retrouver l'utilisation de ces fonctions dans GetTaskList(...) et KillProcess(...). Le code n'est pas très compliqué : tu reprends à peu près la même chose que GetTaskList :

DWORD GetTaskList(void)
[...]
if(pe32.th32ProcessID)
{
if(strcmp(pe32.szExeFile,"emule.exe")==0)
{
HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,0,pe32.th32ProcessID);
if(hProcess)
{
TerminateProcess(hProcess,1);
CloseHandle(hProcess);
}
}
}
[...]

Voilà, le code devrait ressembler à çà, à quelques erreurs près (je n'ai pas du tout compilé ou essayer donc aucune garantie). Et pour l'appel de cet fonction tu utilises soit un sleep ou de préférance un timer, enfin à toi de voir. Je te souhaite bonne chance.
Bye,Xentor609!

Commentaire de BruNews le 09/06/2004 19:20:03 administrateur CS

Je pense que pour killer un P2p FindWindow devrait suffire.
PostMessage(hwnd, WM_CLOSE, 0, 0); et le tour est joue, non ?

Commentaire de Xentor609 le 11/06/2004 11:14:43

Exact ! Tellement évident que je n'ai meme pas pensé !!!

Commentaire de victorcoasne le 16/08/2004 17:24:39

Problème de link sous Dev

Commentaire de Forest44 le 29/09/2004 14:26:13

Comment distinguer les applications des processus comme le fait le gestionnaire de tâches de windows ?

Commentaire de _Thy_ le 02/03/2005 15:22:37

moga :
Je vais m'en servir de base pour exactement le contraire :
Vérifier à intervalles de temps réguliers qu'une appli tourne bien, sinon la relancer (C'est un peu long à expliquer je veux bien que le prog à tracer soit fermé, mais pas trop longtemps... on a parfois de drôles de besoins) :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales