Connaitre la taille de la mémoire utilisée par un processus (comme dans ctrl+alt+suppr)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 099 fois - Téléchargée 33 fois

Contenu du snippet

Je cherchais ce code depuis longtemps, et je suis tombé sur une source de Tilois qui permettait de faire ça. Seulement sa source était beaucoup plus grande que nécessaire donc je l'ai reprogrammé au plus simple possible et ça marche. Vous n'avez donc besoin que de 37 lignes pour faire ça.
Une fonction, elle vous renvoie la taille utilisée par un processus (il faut donner son Identificateur).
Attention, cela ne fonctionne que sous 2k et XP...

Source / Exemple :


' A balancer direct dans un module :

Option Explicit
' Les api nécessaires
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal HProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long
' Le type de données qui va décrire notre processus
Type PROCESS_MEMORY_COUNTERS
    cb As Long
    PageFaultCount As Long
    PeakWorkingSetSize As Long
    WorkingSetSize As Long
    QuotaPeakPagedPoolUsage As Long
    QuotaPagedPoolUsage As Long
    QuotaPeakNonPagedPoolUsage As Long
    QuotaNonPagedPoolUsage As Long
    PagefileUsage As Long
    PeakPagefileUsage As Long
End Type
' Les constantes requises
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260

' Renvoie la taille de la mémoire occupée par un processus
Public Function GetProcessusSize(ProcessID As Long) As Long
    Dim HProcess As Long
    Dim pmc As PROCESS_MEMORY_COUNTERS
    Dim Ret As Long
    ' Récupère le handle du processus à partir de son identifiant
    HProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
    ' On prépare pmc
    pmc.cb = LenB(pmc)
    ' On récupère les infos du processus
    Ret = GetProcessMemoryInfo(HProcess, pmc, pmc.cb)
    GetProcessusSize = Str(pmc.WorkingSetSize)
    Ret = CloseHandle(HProcess)
End Function

Conclusion :


A noter qu'avec certains processus (mais rarement) ça renvoie 0, je ne sais pas d'ou vient cette erreur, si quelqu'un a une info...
@ + tout le monde
MadMatt

A voir également

Ajouter un commentaire

Commentaires

FeelCode
Messages postés
278
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
27 avril 2006
1 -
vala aussi un moment que je cherche ce code :))

pour ce qui est du retour 0 je pensse que sa doit être lier aux droit, et a l'api OpenProcess qui ne peux pas toujours ouvrire le processus certaine appli comme zone alarme (pro )place une interdiction. Et certain le son par defaut dans windows c e qui est normal

mai bon je peux me tromper :)

10/10 pour le code
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Merci FeelCode,
pour ce qui est ce la taille introuvable je veux bien te croire, mais il est forcément possible de la retrouver car elle est quand même affichée dans le gestionnaire de taches... Enfin bon il n'y en a pas trop qui sont interdit, ça passe encore.
FeelCode
Messages postés
278
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
27 avril 2006
1 -
ben il existe peut être un moyen de forcer l'ouverture du processus mai la je vois pas comment...
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Y'a pas une histoire de changer le privilège d'un processus non ? enfin je dis ça car j'ai vu des api qui contenaient ce mot dedans...
hhhp2004
Messages postés
173
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
13 octobre 2007
-
10/10

quelles sont les unites que GetProcessusSize est suppose renvoyer ? (bits, kbytes,etc) parce que si je divise par 1024^2 ca donne a peu pres la meme valeur que le gestionnaire de taches (k)

merci

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.