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 15 019 fois - Téléchargée 35 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
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
7 juil. 2005 à 10:38
bonne question lol... cette source a un peu d'age.
Mais logiquement je dirais en octets donc si tu divise par 1024^2 ça te donne des méga
hhhp2004 Messages postés 173 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 13 octobre 2007
6 juil. 2005 à 04:12
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
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
1 sept. 2004 à 13:03
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...
FeelCode Messages postés 278 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 27 avril 2006 1
1 sept. 2004 à 13:00
ben il existe peut être un moyen de forcer l'ouverture du processus mai la je vois pas comment...
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
1 sept. 2004 à 12:48
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.

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.