Accueil > > > 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
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|