忆年华 发表于 2008-5-21 12:25:53

[VB模块] 获取内存信息

'不知道咱们论坛里有没有热爱编程的朋友,涉及软件开发方面和硬件设计方面的朋友都可以交流.(vb,delphi,c#.net,masm,模电,数电)
'今天先发个以前编写的一个比较简单的VB模块, 这个模块用于通过API来获取相应的内存信息.
'有了这个模块,你只需要用VB平台设计个简单的界面然后调用模块就可以实现获取内存信息的功能了.

----------------------- 我是分割符,分割新内容 -----------------------

'Victor.NS MIC 个人模块,转载请保留此信息.
'QQ : 10006776 , MyBlog : http://hi.baidu.com/忆年华
Option Explicit
Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
'定义类型
Public Type MEMORYSTATUS
      dwLength As Long
      dwMemoryLoad As Long            '正在使用的内存占用百分比
      '物理内存
      dwTotalPhys As Long             '全部物理内存
      dwAvailPhys As Long             '可使用的物理内存
      '虚拟内存
      dwTotalPageFile As Long         '全部虚拟内存
      dwAvailPageFile As Long         '可使用的虚拟内存
      '交换文件
      dwTotalVirtual As Long          '交换文件总大小
      dwAvailVirtual As Long          '尚可交换文件大小
End Type
Public vMemoryData As MEMORYSTATUS
'给函数一个要获取的数据类型和单位类型,函数根据同时递交的单位类型返回给程序相应的数据.
'数据类型注释:
'       0   正在使用内存的百分比             (此时数据单位类型无效)
'       1   物理内存总数
'       2   已使用物理内存数
'       3   剩余物理内存数
'       4   虚拟内存总数
'       5   已使用虚拟内存数
'       6   剩余虚拟内存数
'       7   交换文件总大小
'       8   已用交换文件大小
'       9   剩余交换文件大小
Public Function GetMemoryInfo(ByVal vMemoryStatus As Integer, vMEMUnitType As Boolean) As Double
    '获取内存
    vMemoryData.dwLength = 0
    On Error GoTo GMErr
    Dim TmpMEM As Single
    TmpMEM = 0
    GetMemoryInfo = 0
    GlobalMemoryStatus vMemoryData
   
    Select Case vMemoryStatus
      '正在使用内存的百分比
      Case 0
            GetMemoryInfo = Format(CDbl(vMemoryData.dwMemoryLoad), "0.00")
      '物理内存总数
      Case 1
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwTotalPhys) / 1024) / 1024
            Else
                TmpMEM = (vMemoryData.dwTotalPhys) / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '已使用物理内存数
      Case 2
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwTotalPhys - vMemoryData.dwAvailPhys) / 1024) / 1024
            Else
                TmpMEM = (vMemoryData.dwTotalPhys - vMemoryData.dwAvailPhys) / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '剩余物理内存数量
      Case 3
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwAvailPhys / 1024) / 1024)
            Else
                TmpMEM = vMemoryData.dwAvailPhys / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '虚拟内存总数
      Case 4
            If vMEMUnitType = True Then
                TmpMEM = (vMemoryData.dwTotalPageFile / 1024) / 1024
            Else
                TmpMEM = vMemoryData.dwTotalPageFile / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '已使用虚拟内存数
      Case 5
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwTotalPageFile - vMemoryData.dwAvailPageFile) / 1024) / 1024
            Else
                TmpMEM = (vMemoryData.dwTotalPageFile - vMemoryData.dwAvailPageFile) / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '剩余虚拟内存数
      Case 6
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwAvailPageFile) / 1024) / 1024
            Else
                TmpMEM = (vMemoryData.dwAvailPageFile) / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '交换文件总数
      Case 7
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwTotalVirtual / 1024) / 1024)
            Else
                TmpMEM = vMemoryData.dwTotalVirtual / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '已用交换文件大小
      Case 8
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwTotalVirtual - vMemoryData.dwAvailVirtual) / 1024) / 1024
            Else
                TmpMEM = (vMemoryData.dwTotalVirtual - vMemoryData.dwAvailVirtual) / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '剩余交换文件大小
      Case 9
            If vMEMUnitType = True Then
                TmpMEM = ((vMemoryData.dwAvailVirtual / 1024) / 1024)
            Else
                TmpMEM = vMemoryData.dwAvailVirtual / 1024
            End If
            GetMemoryInfo = Format(CDbl(TmpMEM), "0.00")
      '其他项返回 -1
      Case Else
            GetMemoryInfo = -1
    End Select
    Exit Function
'错误处理
GMErr:
    Err.Clear
    GetMemoryInfo = -1
End Function

[ 本帖最后由 忆年华 于 2008-5-21 12:29 编辑 ]

兰儿 发表于 2008-5-21 12:47:41

我是个笨蛋,看不懂哈!
页: [1]
查看完整版本: [VB模块] 获取内存信息