begin process at 2012 02 13 17:33:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > DA ENUMPROCESSES CODE

DA ENUMPROCESSES CODE


 Information sur la source

 Description

Je suis en train de travailler sur un programme de surveillance des processus. Dans ce cadre j'ai cherché sur le net comment énumérer les processus.
J'ai constaté que le même code tourne sur le net (VBFrance entre-autre). La plupart des gens s'en approprient l'origine, et ce qui est assez burlesque
dans cette histoire c'est que le code proposé est assez maladroit ou ne propose qu'une simple traduction des commentaires de la source d'AllAPI.net .

Il n'est pas rare d'ailleurs que l'on y trouve des variables déclarées ne servant pas, des fonctions API employées n'apportant rien, ce qui montre à quel point le copier/coller n'est pas source de compréhension.

Voici donc un vrai travail d'analyse sur l'emploi de la fonction EnumProcesses, avec une réduction de la routine d'environ la moitié de ce que proposent les autres sources.

J'ai essayé de mettre un maximum de commentaires pour que chacun puisse s'y retrouver.

Je ne dis pas que cette source est meilleure qu'une autre, mais en tout cas, je suis certains qu'elle apportera en compréhension à tous ceux qui souhaitent vraiment savoir comment l'utiliser et pas simplement s'attribuer le mérite de l'avoir décryptée sans même la comprendre.

En conclusion: le but n'est pas tant de s'attribuer le travail des autres, mais de le perfectionner afin que cela puisse profiter à tout le monde.

Source

  • ' fonction permettant d'énumérer les processus
  • Private Declare Function _
  • EnumProcesses Lib "PSAPI.DLL" (ByRef _
  • tableau_process As Long, ByVal taille_tableau_supposee As Long, _
  • ByRef taille_tableau_reelle As Long) As Long
  • ' fonction permettant d'ouvrir les processus
  • Private Declare Function _
  • OpenProcess Lib "Kernel32.dll" (ByVal _
  • acces_desire As Long, _
  • ByVal heritage_handle As Long, _
  • ByVal handle_process As Long) As Long
  • ' fonction permettant de connaître le nom d'un processus dont on connait le handle
  • Private Declare Function _
  • GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal _
  • handle_process_ouvert As Long, _
  • ByVal handle_module As Long, ByVal _
  • nom_processus As String, _
  • ByVal taille As Long) As Long
  • ' fonction permettant de fermer un handle de processus
  • Private Declare Function _
  • CloseHandle Lib "Kernel32.dll" (ByVal _
  • handle_process_ouvert As Long) As Long
  • ' variable pour openprocess, permet de consulter le nom des processus
  • Private Const PROCESS_VM_READ = 16
  • Private Const PROCESS_QUERY_INFORMATION = 1024
  • ' initialisation des variables
  • Dim taille_tableau_supposee As Long
  • Dim taille_tableau_reelle As Long
  • Dim nb_process As Long
  • Dim tableau_process() As Long
  • Dim nom_processus As String
  • Dim taille As Long
  • Dim handle_process_ouvert As Long
  • Dim item As Long
  • Sub Form_Load()
  • ' on suppose qu'il y a maximum 250 processus en cours
  • ReDim tableau_process(250) As Long
  • ' dimensions en octets du tableau (4 octets par procesus, soit 1000 octets)
  • taille_tableau_supposee = 1000
  • 'passe la fonction EnumProcess pour remplir le tableau des de processus et en connaître la taille reelle
  • EnumProcesses tableau_process(1), taille_tableau_supposee, taille_tableau_reelle
  • 'Compte les processus (4 octets par processus, il y a donc 4 fois moins de handle que le nombre
  • 'contenu dans taille_reelle
  • nb_process = taille_tableau_reelle / 4
  • 'passe en revu tous les handles de processus pour en obtenir le nom
  • For item = 1 To nb_process
  • DoEvents
  • 'Donne le handle du processus et l' ouvre
  • handle_process_ouvert = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, tableau_process(item))
  • If handle_process_ouvert <> 0 Then
  • 'initialise un buffer pour recevoir le nom du processus
  • nom_processus = Space(250)
  • taille = 250
  • 'Prend le nom du processus, cette fonction renvoi le nb de caractère du nom , d'où l'utilisation de la variable taille réelle
  • taille_reelle = GetModuleFileNameExA(handle_process_ouvert, 0, nom_processus, taille)
  • 'Enlève les espaces
  • nom_module = Left(nom_module, taille_reelle)
  • End If
  • 'Ferme les handles du processus
  • CloseHandle handle_process_ouvert
  • 'ajoute à une liste le processus en cours ainsi que son handle (appelé PID dans le gestionnaire des tâches)
  • List1.AddItem nom_module & " " & tableau_process(item)
  • Next
  • End Sub
' fonction permettant d'énumérer les processus
Private Declare Function _
EnumProcesses Lib "PSAPI.DLL" (ByRef _
    tableau_process As Long, ByVal taille_tableau_supposee As Long, _
    ByRef taille_tableau_reelle As Long) As Long
    
' fonction permettant d'ouvrir les processus
Private Declare Function _
OpenProcess Lib "Kernel32.dll" (ByVal _
    acces_desire As Long, _
    ByVal heritage_handle As Long, _
    ByVal handle_process As Long) As Long

' fonction permettant de connaître le nom d'un processus dont on connait le handle
Private Declare Function _
GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal _
    handle_process_ouvert As Long, _
    ByVal handle_module As Long, ByVal _
    nom_processus As String, _
    ByVal taille As Long) As Long
    
' fonction permettant de fermer un handle de processus
Private Declare Function _
CloseHandle Lib "Kernel32.dll" (ByVal _
    handle_process_ouvert As Long) As Long


' variable pour openprocess, permet de consulter le nom des processus
Private Const PROCESS_VM_READ = 16
Private Const PROCESS_QUERY_INFORMATION = 1024


' initialisation des variables
Dim taille_tableau_supposee As Long
Dim taille_tableau_reelle As Long
Dim nb_process As Long
Dim tableau_process() As Long
Dim nom_processus As String
Dim taille As Long
Dim handle_process_ouvert As Long
Dim item As Long

  
  
  
Sub Form_Load()

' on suppose qu'il y a maximum 250 processus en cours
ReDim tableau_process(250) As Long


' dimensions en octets du tableau (4 octets par procesus, soit 1000 octets)
taille_tableau_supposee = 1000


'passe la fonction EnumProcess pour remplir le tableau des de processus et en connaître la taille reelle
EnumProcesses tableau_process(1), taille_tableau_supposee, taille_tableau_reelle


'Compte les processus (4 octets par processus, il y a donc 4 fois moins de handle que le nombre
'contenu dans taille_reelle
nb_process = taille_tableau_reelle / 4

'passe en revu tous les handles  de processus pour en obtenir le nom
For item = 1 To nb_process
        DoEvents
        'Donne le handle du processus et l' ouvre
        handle_process_ouvert = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, tableau_process(item))
        If handle_process_ouvert <> 0 Then
                'initialise un buffer pour recevoir le nom du processus
                nom_processus = Space(250)
                taille = 250
                'Prend le nom du processus, cette fonction renvoi le nb de caractère du nom , d'où l'utilisation de la variable taille réelle
                taille_reelle = GetModuleFileNameExA(handle_process_ouvert, 0, nom_processus, taille)
                'Enlève les espaces
                nom_module = Left(nom_module, taille_reelle)
        End If
'Ferme les handles du processus
CloseHandle handle_process_ouvert


'ajoute à une liste le processus en cours ainsi que son handle (appelé PID dans le gestionnaire des tâches)
List1.AddItem nom_module & " " & tableau_process(item)
Next

End Sub
  

 Conclusion

Comme d'hab, je vous invite à venir faire un p'tit tour sur API @ la Loupe
http://xav.prog.power.free.fr


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) SQL SERVEUR - COMMUNIQUER (REQUÊTE + UPGRADE) - MÉTADONNÉES ...
Source avec Zip Source avec une capture Source .NET (Dotnet) EXTRACTION CODE HTML, EDITION DYNAMIQUE DE FICHIER HTML (MAR...
Source avec Zip Source avec une capture LECTEUR DE FLUX VIDÉO (COMMENT CRÉER VOTRE LECTEUR)
Source avec Zip Source avec une capture Source .NET (Dotnet) TRACEROUTE, TRAÇAGE DE SERVEUR OU D'IP
Source avec Zip Source avec une capture HTTP TALK - UTILISATION DU PROTOCOLE HTTP 1.1 AVEC WINSOCK

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) LA LISTE DES TÂCHES COMME DANS L'ONGLET APPLICATION DU GESTI... par ShareVB
Source avec Zip FERMER UN PROGRAMME OU UN PROCESSUS par 123collargol
Source avec Zip Source .NET (Dotnet) AUTOMATISER LA SAISIE DE CLÉES CD EN RÉCUPERANT LE NOM DU PR... par cracken3544
OUVRIR UN PROGRAMME EXTERNE ET LE FERMER par Nix

Commentaires et avis

Commentaire de ORTIPIC le 25/04/2006 15:28:12

bien mais cool
une erreur la.........

   nom_module = Left(nom_module , taille_reelle)

comme ca c est mieu

   nom_module = Left(nom_processus, taille_reelle)




Commentaire de cgrincheux le 19/01/2008 22:30:39

Enfin un code qui fonctionne et de plus  COMMENTé merci !!!
C'est presque se qui me faut.
Ps : un petit zip aurait été le top.

Commentaire de scoob79 le 22/12/2008 19:38:54

Plus simple commande dos psservice.exe de sysinternals

Commentaire de zavier666 le 23/12/2008 14:05:27

Avant d'ajouter un commentaire complètement inutile, t'as essayé de comprendre au moins à quoi sert ce code??

J'en ai pas vraiment l'impression....

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Privileges et processus [ par violent_ken ] Violent Ken Bonjour à tous, et désolé de créer un nouveau thread sur le même (ou à peu près) sujet, mais comme j'ai à nouveau accès en permanc Problème sur API OpenProcess [ par violent_ken ] Violent Ken Bonjour, je cherche à récupérer des informations sur les processus lancés. J'utilise donc les API Openprocess, EnumPro Processus, tableau [ par allthew3 ] Bonjour,Jaimerais avoir la liste des processus et la mettre dans un tableau (unidimensionel pour être précis)en gros, j'aimerais obtenir quelque chose Help Me ! Terminer un processus en VBS !! [ par ridley707 ] Bonjour,Je souhaite créer un fichier vbs, afin de vérifier ( facultatif ) la liste des processus et biensure terminé un processus donné.Ex: Terminé  " Programme fermé mais processus toujours actif [ par Aphex Twin ] Bonjour, j'ai un petit soucis avec un programme. Le programme en lui même fonctionne comme il faut mais je remarque malgré tout quelque chose d'anorma Démarrer / Arréter un processus [ par sadok_sa ] Pouvez vous m'aider à trouver 2 fonctions :  <p class="Ms Détecter une erreur [ par florantanplan ] Bonjour à tous,   Voilà je fais un p'tit dev en VB6. Celui-ci a pour but de lancer l'exécution d'un exécutable. Je n'ai pas accès aux sources de cet e Processus en cours [ par draluorg ] Salut a tous, Voila j'ai voulu code un IsProcessRunning et j'ai des resultats bizare :-/Soit j'ai pres de 100  processus masque soit ma fonction est Copie de processus [ par aurelien2723 ] Bonjour,Je voudrais savoir s'il est possible de copier facilement un processus en cours d'exécution.En étudiant le problème, j'ai aperçu la fonction C Lister Processus [ par flopad ] Bonjour tout le monde!J'essaie de faire un code qui donne la chose suivante : à partir d'une liste, je dois lister leur processus en cours, détecter s


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,526 sec (3)

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