non funziona però...mi dà sempre 20-30 Mb in più di quanto ha veramente il processo.
sempre ammesso che il programma "gestione attività" di windows vista, che indica tutti i processi in corso, stabilisca correttamente le dimensioni dell'assorbimento Ram dei vari processi.
questo è il codice usato:
codice:
questa sta nel modulo:
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
Public PID As Long, hProc As Long, proc As PROCESS_MEMORY_COUNTERS
Public Const PROCESS_TERMINATE = &H1
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const TH32CS_SNAPPROCESS = &H2
Public Function ControllaUsoRam(HWND_Finestra As Long)
Dim RETV As Long, RISULTATO As String
RETV = GetWindowThreadProcessId(HWND_Finestra, PID)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID)
RISULTATO = GetProcessMemoryInfo(hProc, proc, Len(proc))
RISULTATO = "Uso Ram: " & AggiustaDimensioni(proc.WorkingSetSize)
CloseHandle hProc
ControllaUsoRam = RISULTATO
End Function
Public Function AggiustaDimensioni(DimBytes As Long) As String
'da bytes in KB => bytes / 1024 ===== da bytes in MB => bytes / 1024 / 1024
AggiustaDimensioni = FormatNumber(DimBytes / 1024 / 1024, 2, vbTrue, vbFalse, vbTrue) & " MB"
End Function
questa in una procedura di un form:
lblUsoRAM.Caption = ControllaUsoRam(Me.HWND): lblUsoRAM.Refresh
ho provato tutti i valori della struttura PROCESS_MEMORY_COUNTERS, ma addiritura gli altri sono anche più alti...
dove sta l'inghippo?!
:rollo: