找回密码
 中文注册
查看: 444|回复: 1

[VB模块] 获取内存信息

[复制链接]
发表于 2008-5-21 12:25:53 | 显示全部楼层 |阅读模式
'不知道咱们论坛里有没有热爱编程的朋友,涉及软件开发方面和硬件设计方面的朋友都可以交流.(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 编辑 ]

评分

参与人数 1体力 +3 偃师币 +3 +3 收起 理由
孤独不苦 + 3 + 3 + 3

查看全部评分

发表于 2008-5-21 12:47:41 | 显示全部楼层
我是个笨蛋,看不懂哈!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文注册

本版积分规则

Archiver|小黑屋|加入我们|偃师网 ( 豫ICP备11013690号 )

GMT+8, 2025-5-15 05:52 , Processed in 0.041400 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表