1

如何在 VB 6 代码中获取 CPU 和内存使用情况?谢谢!

4

3 回答 3

3

确定当前机器上的 CPU 使用率

声明

Option Explicit
' Note that if you declare the lpData parameter as String, you
' must pass it By Value.
 Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
 Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _
 As String, ByVal lpReserved As Long, lpType As Long, lpData As _
 Any, lpcbData As Long) As Long

 Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
 "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
 ByVal ulOptions As Long, ByVal samDesired As Long, _
 phkResult As Long) As Long

 Private Declare Function RegCloseKey Lib "advapi32.dll" _
 (ByVal hKey As Long) As Long

 Private Const KEY_QUERY_VALUE = &H1

 Private Const HKEY_DYN_DATA As Long = &H80000006
 Private Const STAT_DATA = "PerfStats\StatData"
 Private Const CPU_USE = "KERNEL\CPUUsage"

代码

Public Function CPU_Usage_Percent() As Long
On Error GoTo errorhandler:
Dim lResult As Long
Dim lData As Long
Dim lType As Long
Dim hKey As Long


lResult = RegOpenKeyEx(HKEY_DYN_DATA, STAT_DATA, _
   0, KEY_QUERY_VALUE, hKey)

If lResult = 0 Then
    lResult = RegQueryValueEx(hKey, CPU_USE, 0, _
     lType, lData, 4)
    If lResult = 0 Then
        CPU_Usage_Percent = lData
        lResult = RegCloseKey(hKey)
    End If
End If
Exit Function

 errorhandler:
     On Error Resume Next
     RegCloseKey hKey
     Exit Function
     End Function
于 2009-09-10T11:42:19.423 回答
2

以下是获取 RAM 信息的方法:

您可以使用下面的代码并将其放入表单中。我将错误处理留给您,因为我希望您只想以此为例。还有一个将 64 位整数转换为 VB 双精度的函数,以及一个将数字格式化为 KB、MB 和 GB 的函数。

Private Declare Sub GlobalMemoryStatusEx Lib "kernel32" (lpBuffer As MEMORYSTATUSEX)

私有类型 INT64
   LoPart 只要
   HiPart 只要
结束类型

私有类型 MEMORYSTATUSEX
   dwLength 只要
   dwMemoryLoad 只要
   ulTotalPhys 作为 INT64
   ulAvailPhys 为 INT64
   ulTotalPageFile 为 INT64
   ulAvailPageFile 为 INT64
   ulTotalVirtual 作为 INT64
   ulAvailVirtual 作为 INT64
   ulAvailExtendedVirtual 作为 INT64
结束类型

私有子 Form_Load()

   Me.AutoRedraw = True
   调用 PrintRamInformation

结束子

私有子 PrintRamInformation()
   将 udtMemStatEx 调暗为 MEMORYSTATUSEX

   甲基氯化物

   udtMemStatEx.dwLength = Len(udtMemStatEx)
   调用 GlobalMemoryStatusEx(udtMemStatEx)

   Me.Print "总物理内存" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalPhys.LoPart, udtMemStatEx.ulTotalPhys.HiPart)) & " (" & Round(CLargeInt(udtMemStatEx.ulAvailPhys.LoPart, udtMemStatEx.ulAvailPhys.HiPart) / (CLargeInt(udtMemStatEx.ulTotalPhys.LoPart, udtMemStatEx.ulTotalPhys.HiPart)) * 100) & "% Free)"
   Me.Print "可用物理内存" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPhys.LoPart, udtMemStatEx.ulAvailPhys.HiPart))
   Me.Print "总虚拟内存" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalVirtual.LoPart, udtMemStatEx.ulTotalVirtual.HiPart))
   Me.Print "可用虚拟内存" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailVirtual.LoPart, udtMemStatEx.ulAvailVirtual.HiPart))
   Me.Print "总页文件" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalPageFile.LoPart, udtMemStatEx.ulTotalPageFile.HiPart))
   Me.Print "可用页面文件" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPageFile.LoPart, udtMemStatEx.ulAvailPageFile.HiPart))
   Me.Print "可用的扩展页面文件" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailExtendedVirtual.LoPart, udtMemStatEx.ulAvailExtendedVirtual.HiPart))
   Me.Print "内存负载" + vbTab + CStr(udtMemStatEx.dwMemoryLoad) + "%"

结束子

'此函数将 LARGE_INTEGER 数据类型转换为双精度
私有函数 CLargeInt(Lo As Long, Hi As Long) As Double
   将 dblLo 调暗为 Double
   将 dblHi 调暗为 Double

   如果 Lo < 0 那么
      dblLo = 2 ^ 32 + Lo
   别的
      dblLo = Lo
   万一

   如果 Hi < 0 那么
      dblHi = 2 ^ 32 + 嗨
   别的
      dblHi = 你好
   万一

   CLargeInt = dblLo + dblHi * 2 ^ 32

结束功能

公共函数 NumberInKB(ByVal vNumber 作为货币) 作为字符串
   暗淡 strReturn 作为字符串

   选择案例 vNumber
      大小写 < 1024 ^ 1
         strReturn = CStr(vNumber) & "字节"

      大小写 < 1024 ^ 2
         strReturn = CStr(Round(vNumber / 1024, 1)) & "KB"

      大小写 < 1024 ^ 3
         strReturn = CStr(Round(vNumber / 1024 ^ 2, 2)) & "MB"

      大小写 < 1024 ^ 4
         strReturn = CStr(Round(vNumber / 1024 ^ 3, 2)) & "GB"
   结束选择

   NumberInKB = strReturn

结束功能
于 2009-09-11T16:36:43.630 回答
1

http://www.eggheadcafe.com/community/aspnet/8/44059/cpu-usage.aspx

于 2009-09-10T11:29:57.333 回答