Отображение количества оперативной памяти, которое занимает указанный процесс - VB

Узнай цену своей работы

Формулировка задачи:

Как написать программу, которая будет показывать, сколько оперативной памяти занимает указанный процесс? Буду благодарен.)

Решение задачи: «Отображение количества оперативной памяти, которое занимает указанный процесс»

textual
Листинг программы
Option Explicit
 
Private Declare Function NtQuerySystemInformation Lib "ntdll.dll" (ByVal infoClass As Long, Buffer As Any, ByVal BufferSize As Long, ret As Long) As Long
Private Declare Function GetMem4 Lib "msvbvm60" (src As Any, dst As Any) As Long
Private Declare Function GetMem8 Lib "msvbvm60" (src As Any, dst As Any) As Long
Private Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
Private Type UNICODE_STRING
    Length      As Integer
    MaxLength   As Integer
    lpBuffer    As Long
End Type
 
Private Const SystemProcessInformation      As Long = &H5&
Private Const STATUS_INFO_LENGTH_MISMATCH   As Long = &HC0000004
Private Const STATUS_SUCCESS                As Long = 0&
 
 
Private Sub Form_Load()
    Dim ret         As Long
    Dim buf()       As Byte
    Dim Offset      As Long
    Dim deltaOffset As Long
    Dim ImgName     As UNICODE_STRING
    Dim ProcName    As String
    Dim PID         As Long
    Dim MemWorkSet  As Long
    
    If NtQuerySystemInformation(SystemProcessInformation, ByVal 0&, 0&, ret) = STATUS_INFO_LENGTH_MISMATCH Then
    
        ReDim buf(ret - 1)
        
        If NtQuerySystemInformation(SystemProcessInformation, buf(0), ret, ret) = STATUS_SUCCESS Then
            
            Do
                GetMem8 buf(Offset + 14 * 4), ImgName
                GetMem4 buf(Offset + 17 * 4), PID
                GetMem4 buf(Offset + 26 * 4), MemWorkSet
                
                If PID = 0 Then
                    ProcName = "System Idle Process"
                Else
                    ProcName = Space$(ImgName.Length \ 2)
                    memcpy ByVal StrPtr(ProcName), ByVal ImgName.lpBuffer, ImgName.Length
                End If
                
                Debug.Print PID
                Debug.Print ProcName
                Debug.Print Format(MemWorkSet \ 1024, "0,000") & " KB."
                
                GetMem4 buf(Offset), deltaOffset
                Offset = Offset + deltaOffset
                
            Loop While deltaOffset
 
        End If
        
    End If
    
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы