Récupérer les infos sur l'utilisation mémoire d'un processus


Propriétés du code


Date de création : 11/11/2006 à 20:09:00
7 Commentaire(s)
  MadMatt

 

Présentation


Une fonction, elle vous renvoie une structure d'informations sur l'utilisation mémoire d'un processus (il faut donner son Identificateur).
Attention, cela ne fonctionne que sous 2k et XP...

 

Code


' Déclarations API
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Const PROCESS_VM_READ As Long = (&H10)
Public Const PROCESS_QUERY_INFORMATION As Long = (&H400)
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
' Pour la taille d'un processus
Type PROCESS_MEMORY_COUNTERS
    cb As Long                          ' Taille de la structure
    PageFaultCount As Long              ' Nombre d'erreurs de page
    PeakWorkingSetSize As Long          ' Utilisation max de la mémoire RAM
    WorkingSetSize As Long              ' Utilisation de la mémoire RAM
    QuotaPeakPagedPoolUsage As Long    ' Utilisation max de la mémoire paginée
    QuotaPagedPoolUsage As Long        ' Utilisation de la mémoire paginée
    QuotaPeakNonPagedPoolUsage As Long
    QuotaNonPagedPoolUsage As Long
    PagefileUsage As Long              ' Utilisation de la mémoire virtuelle
    PeakPagefileUsage As Long          ' Utilisation max de la mémoire virtuelle
End Type


'---------------------------------------------------------------------------------------
' Procedure : GetProcessMemoryUsage
' DateTime  : 23/11/2006 15:34
' Author    : Vb System Library
' Purpose  : Renvoie une structure PROCESS_MEMORY_COUNTERS contenant toutes
'              les infos sur l'utilisation mémoire du processus
' Params    : ProcessID : ID du processus
'---------------------------------------------------------------------------------------
Public Function GetProcessMemoryInfos(ByVal ProcessID As Long) As PROCESS_MEMORY_COUNTERS
    Dim hProcess As Long
    Dim pmc As PROCESS_MEMORY_COUNTERS
    ' 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
    GetProcessMemoryInfo hProcess, pmc, pmc.cb
    CloseHandle hProcess
    GetProcessMemoryInfos = pmc
End Function


 

Historique


Voici l'historique des modifications de ce code :
Le 30/12/2006 par MadMatt : Petit bug daffichage
Le 02/01/2007 par MadMatt : ajout de toutes les infos sur la mémoire

 
 

Modifier le code

Seul les admins et l'auteur du code lui même peuvent modifier ce code.

 

Commentaires


De violent_ken le 02/01/2007 à 00:14


Hum, ne récupère t-on pas également toutes les autres infos contenues dans la variable de type PROCESS_MEMORY_COUNTERS ?
@+

 

De MadMatt le 02/01/2007 à 00:20


Effectivement, ce code datait et j'ai pas réfléchi quand je l'ai copié ici.
Le mieux serait de faire une fonction qui renvoie directement un type PROCESS_MEMORY_COUNTERS qui renferme toutes les infos sur l'utilisation mémoire d'un processus.

 

De violent_ken le 02/01/2007 à 00:21


Je te propose ceci (je ne préfère pas modifier directement) :





Option Explicit


'-------------------------------------------------------
'APIS
'-------------------------------------------------------
'fermer un handle
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'obtenir un handle d'un processus à ouvrir
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
'obtient des infos mémoire sur un processus en particulier
Private Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long


'-------------------------------------------------------
'CONSTANTES
'-------------------------------------------------------
Private Const PROCESS_QUERY_INFORMATION As Long = 1024
Private Const PROCESS_VM_READ As Long = 16


'-------------------------------------------------------
'TYPES
'-------------------------------------------------------
Public 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



'-------------------------------------------------------
'obtient les infos-mémoire d'un processus
'-------------------------------------------------------
Public Function GetMemoryInfo(ByVal PID As Long) As PROCESS_MEMORY_COUNTERS
Dim procMem As PROCESS_MEMORY_COUNTERS
Dim hProcess As Long

'récupère la taille du type
procMem.cb = LenB(procMem)

'obtient le handle du processus désiré
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID)

'obtient les infos
GetProcessMemoryInfo hProcess, procMem, procMem.cb

'stocke les infos récupérées
With GetMemoryInfo
.cb = procMem.cb
.PageFaultCount = procMem.PageFaultCount
.PagefileUsage = procMem.PagefileUsage
.PeakPagefileUsage = procMem.PeakPagefileUsage
.PeakWorkingSetSize = procMem.PeakWorkingSetSize
.QuotaNonPagedPoolUsage = procMem.QuotaNonPagedPoolUsage
.QuotaPagedPoolUsage = procMem.QuotaPagedPoolUsage
.QuotaPeakNonPagedPoolUsage = procMem.QuotaPeakNonPagedPoolUsage
.QuotaPeakPagedPoolUsage = procMem.QuotaPeakPagedPoolUsage
.WorkingSetSize = procMem.WorkingSetSize
End With
End Function

 

De violent_ken le 02/01/2007 à 00:22


Erf, manque les tabulations aprèsle copié/collé ;)

 

De MadMatt le 02/01/2007 à 00:23


Ok je vois, mais on ne peut pas faire directement :
GetMemoryInfo=pmc à la fin de la fonction ?

 

De MadMatt le 02/01/2007 à 13:49


voilà j'ai mis à jour mais avec le GetMemoryInfo=pmc ça a pas fait d'erreur de compilation

 

De violent_ken le 02/01/2007 à 13:53


Oui, c'est évidemment bien mieux qu'avec With...End With ;)

 

Ajouter un commentaire


Vous devez être connecté pour pouvoir poster un commentaire.

 
 

Valid HTML 4.01 Transitional Valid CSS

Site web de Vb System Library version 1.3
Developpement et design réalisé par : Matthieu Napoli (MadMatt)
© 2007 Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
Temps d'execution de la page : 0.015 s
www.mnapoli.fr