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
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.