emplacement memoire

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

emplacement memoire

Message 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 ... :?
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci :D , regarde tes Messages privé.. :)
Répondre