Page 1 sur 1

emplacement memoire

Publié : dim. 06/juil./2008 22:23
par Backup
qui saurai comment connaitre l'emplacement memoire (Ram), sa taille, et éventuellement l'adresse de fin (ram) d'un programme XXX ???

hum ! la question qui tue ! :lol:

ps: je sais deja avoir la liste des process
mais pas moyen d'avoir leur emplacement memoire; taille ... :?

Publié : dim. 06/juil./2008 23:00
par Jacobus
Ceci devrait t'aider, je m'en sers dans mon gestionnaire des tâches en PB 4.20 sur xp et vista. A intégrer dans un code bien sûr.

Code : Tout sélectionner

;structure nécessaire pour obtenir l'usage mémoire
Structure PROCESS_MEMORY_COUNTERS
  cb.l
  PageFaultCount.l
  PeakWorkingSetSize.l
  WorkingSetSize.l
  QuotaPeakPagedPoolUsage.l
  QuotaPagedPoolUsage.l
  QuotaPeakNonPagedPoolUsage.l
  QuotaNonPagedPoolUsage.l
  PagefileUsage.l
  PeakPagefileUsage.l
EndStructure

ProcedureDLL GetProcessMemory(PID.l) ; mémoire vive utilisée 
  
  pmc.PROCESS_MEMORY_COUNTERS   
  hProcess.l  = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, PID) 
   
  If OpenLibrary(0,"PSAPI.DLL")     
    *F=GetFunction(0,"GetProcessMemoryInfo") 
    If *F 
      CallFunctionFast(*F,hProcess,@pmc,SizeOf(pmc))    
       GetProcessusSize = pmc\WorkingSetSize               
    Else  
      CloseLibrary(0) 
      End 
    EndIf 
  Else 
    End 
  EndIf 
  
  ProcedureReturn GetProcessusSize 
  
EndProcedure

ProcedureDLL GetProcessPagefile(PID.l) ; mémoire paginée
  
  pmc.PROCESS_MEMORY_COUNTERS  
  hProcess.l  = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, PID) 
   
  If OpenLibrary(0,"PSAPI.DLL")     
    *F=GetFunction(0,"GetProcessMemoryInfo") 
    If *F 
      CallFunctionFast(*F,hProcess,@pmc,SizeOf(pmc))    
       GetProcessusPagefileUsage = pmc\PagefileUsage               
    Else  
      CloseLibrary(0) 
      End 
    EndIf 
  Else 
    End 
  EndIf 
  
  ProcedureReturn GetProcessusPagefileUsage 
  
EndProcedure

;exemples de récup avec un identifiant de process correct...
Memory   = Str(GetProcessMemory(pid)/1024)+"  ko"		      
PageFile = Str(GetProcessPagefile(pid)/1024)+"  ko"
J'ai essayé aussi avec ça et ça fonctionne (je pensais obtenir plus de droits, mais c'est pareil)
Mets ça :

Code : Tout sélectionner

hProcess.l = OpenProcess_( #PROCESS_ALL_ACCESS, #False, PID )
à la place de ça :

Code : Tout sélectionner

hProcess.l  = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, PID)

Publié : lun. 07/juil./2008 1:05
par Backup
Merci :D , regarde tes Messages privé.. :)