如何在VB6中获得当前的CPU和RAM使用率?

如何在VB6中获得当前的CPU和RAM使用率?,vb6,memory-management,cpu-usage,Vb6,Memory Management,Cpu Usage,如何在VB6代码中获得CPU和内存使用率?谢谢 确定当前计算机上的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

如何在VB6代码中获得CPU和内存使用率?谢谢

确定当前计算机上的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"
代码

确定当前计算机上的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"
代码


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

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

Private Declare Sub GlobalMemoryStatusEx Lib "kernel32" (lpBuffer As MEMORYSTATUSEX) Private Type INT64 LoPart As Long HiPart As Long End Type Private Type MEMORYSTATUSEX dwLength As Long dwMemoryLoad As Long ulTotalPhys As INT64 ulAvailPhys As INT64 ulTotalPageFile As INT64 ulAvailPageFile As INT64 ulTotalVirtual As INT64 ulAvailVirtual As INT64 ulAvailExtendedVirtual As INT64 End Type Private Sub Form_Load() Me.AutoRedraw = True Call PrintRamInformation End Sub Private Sub PrintRamInformation() Dim udtMemStatEx As MEMORYSTATUSEX Me.Cls udtMemStatEx.dwLength = Len(udtMemStatEx) Call GlobalMemoryStatusEx(udtMemStatEx) Me.Print "Total physical memory" + 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 "Available physical memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPhys.LoPart, udtMemStatEx.ulAvailPhys.HiPart)) Me.Print "Total virtual memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalVirtual.LoPart, udtMemStatEx.ulTotalVirtual.HiPart)) Me.Print "Available virtual memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailVirtual.LoPart, udtMemStatEx.ulAvailVirtual.HiPart)) Me.Print "Total page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalPageFile.LoPart, udtMemStatEx.ulTotalPageFile.HiPart)) Me.Print "Available page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPageFile.LoPart, udtMemStatEx.ulAvailPageFile.HiPart)) Me.Print "Available extended page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailExtendedVirtual.LoPart, udtMemStatEx.ulAvailExtendedVirtual.HiPart)) Me.Print "Memory Load" + vbTab + CStr(udtMemStatEx.dwMemoryLoad) + "%" End Sub 'This function converts the LARGE_INTEGER data type to a double Private Function CLargeInt(Lo As Long, Hi As Long) As Double Dim dblLo As Double Dim dblHi As Double If Lo < 0 Then dblLo = 2 ^ 32 + Lo Else dblLo = Lo End If If Hi < 0 Then dblHi = 2 ^ 32 + Hi Else dblHi = Hi End If CLargeInt = dblLo + dblHi * 2 ^ 32 End Function Public Function NumberInKB(ByVal vNumber As Currency) As String Dim strReturn As String Select Case vNumber Case Is < 1024 ^ 1 strReturn = CStr(vNumber) & " bytes" Case Is < 1024 ^ 2 strReturn = CStr(Round(vNumber / 1024, 1)) & " KB" Case Is < 1024 ^ 3 strReturn = CStr(Round(vNumber / 1024 ^ 2, 2)) & " MB" Case Is < 1024 ^ 4 strReturn = CStr(Round(vNumber / 1024 ^ 3, 2)) & " GB" End Select NumberInKB = strReturn End Function 私有声明子GlobalMemoryStatusEx库“kernel32”(lpBuffer作为MEMORYSTATUSEX) 私有类型INT64 罗巴特 HiPart尽可能长 端型 私有类型MemoryStatutex 长度等于 只要 ulTotalPhys As INT64 ulAvailPhys As INT64 ulTotalPageFile作为INT64 文件名为INT64 UltotalVirtualAS INT64 与INT64相同的虚拟文件 ulAvailExtendedVirtual作为INT64 端型 专用子表单_加载() Me.AutoRedraw=真 调用打印信息 端接头 私有子打印信息() 将udtMemStatEx设置为MemoryStatuex 我 udtMemStatEx.dwLength=Len(udtMemStatEx) 调用GlobalMemoryStatusEx(udtMemStatEx) Me.打印“总物理内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalPhys.LoPart,udtmstatex.ulTotalPhys.HiPart))和“(&Round(CLargeInt(udtmstatex.ulAvailPhys.LoPart,udtmstatex.ulAvailPhys.HiPart))和“%Free” Me.打印“可用物理内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailPhys.LoPart,udtmstatex.ulAvailPhys.HiPart)) Me.打印“总虚拟内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalVirtual.LoPart,udtMemStatEx.ulTotalVirtual.HiPart)) Me.Print“Available virtual memory”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailVirtual.LoPart,udtMemStatEx.ulAvailVirtual.HiPart)) Me.Print“总页面文件”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalPageFile.LoPart,udtMemStatEx.ulTotalPageFile.HiPart)) Me.Print“Available page file”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailPageFile.LoPart,udtmstatex.ulAvailPageFile.HiPart)) Me.Print“可用扩展页面文件”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailExtendedVirtual.LoPart,udtMemStatEx.ulAvailExtendedVirtual.HiPart)) Me.Print“Memory Load”+vbTab+CStr(udtMemStatEx.dwMemoryLoad)+“%” 端接头 '此函数将大整数数据类型转换为双精度 专用函数CLargeInt(Lo为长,Hi为长)为双精度 将dblLo设置为双精度 双精度dblHi 如果Lo<0,则 dblLo=2^32+Lo 其他的 dblLo=Lo 如果结束 如果Hi<0,则 dblHi=2^32+Hi 其他的 dblHi=Hi 如果结束 CLargeInt=dblLo+dblHi*2^32 端函数 作为字符串的公共函数NumberInKB(ByVal vNumber作为货币) 变暗strReturn为字符串 选择案例编号 病例<1024^1 strReturn=CStr(vNumber)和“bytes” 病例<1024^2 strReturn=CStr(四舍五入(vNumber/1024,1))和“KB” 病例<1024^3 strReturn=CStr(四舍五入(vNumber/1024^2,2))&“MB” 病例<1024^4 strReturn=CStr(四舍五入(vNumber/1024^3,2))和“GB” 结束选择 NumberInKB=strReturn 端函数
以下是获取RAM信息的方法:

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

Private Declare Sub GlobalMemoryStatusEx Lib "kernel32" (lpBuffer As MEMORYSTATUSEX) Private Type INT64 LoPart As Long HiPart As Long End Type Private Type MEMORYSTATUSEX dwLength As Long dwMemoryLoad As Long ulTotalPhys As INT64 ulAvailPhys As INT64 ulTotalPageFile As INT64 ulAvailPageFile As INT64 ulTotalVirtual As INT64 ulAvailVirtual As INT64 ulAvailExtendedVirtual As INT64 End Type Private Sub Form_Load() Me.AutoRedraw = True Call PrintRamInformation End Sub Private Sub PrintRamInformation() Dim udtMemStatEx As MEMORYSTATUSEX Me.Cls udtMemStatEx.dwLength = Len(udtMemStatEx) Call GlobalMemoryStatusEx(udtMemStatEx) Me.Print "Total physical memory" + 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 "Available physical memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPhys.LoPart, udtMemStatEx.ulAvailPhys.HiPart)) Me.Print "Total virtual memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalVirtual.LoPart, udtMemStatEx.ulTotalVirtual.HiPart)) Me.Print "Available virtual memory" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailVirtual.LoPart, udtMemStatEx.ulAvailVirtual.HiPart)) Me.Print "Total page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulTotalPageFile.LoPart, udtMemStatEx.ulTotalPageFile.HiPart)) Me.Print "Available page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailPageFile.LoPart, udtMemStatEx.ulAvailPageFile.HiPart)) Me.Print "Available extended page file" + vbTab + NumberInKB(CLargeInt(udtMemStatEx.ulAvailExtendedVirtual.LoPart, udtMemStatEx.ulAvailExtendedVirtual.HiPart)) Me.Print "Memory Load" + vbTab + CStr(udtMemStatEx.dwMemoryLoad) + "%" End Sub 'This function converts the LARGE_INTEGER data type to a double Private Function CLargeInt(Lo As Long, Hi As Long) As Double Dim dblLo As Double Dim dblHi As Double If Lo < 0 Then dblLo = 2 ^ 32 + Lo Else dblLo = Lo End If If Hi < 0 Then dblHi = 2 ^ 32 + Hi Else dblHi = Hi End If CLargeInt = dblLo + dblHi * 2 ^ 32 End Function Public Function NumberInKB(ByVal vNumber As Currency) As String Dim strReturn As String Select Case vNumber Case Is < 1024 ^ 1 strReturn = CStr(vNumber) & " bytes" Case Is < 1024 ^ 2 strReturn = CStr(Round(vNumber / 1024, 1)) & " KB" Case Is < 1024 ^ 3 strReturn = CStr(Round(vNumber / 1024 ^ 2, 2)) & " MB" Case Is < 1024 ^ 4 strReturn = CStr(Round(vNumber / 1024 ^ 3, 2)) & " GB" End Select NumberInKB = strReturn End Function 私有声明子GlobalMemoryStatusEx库“kernel32”(lpBuffer作为MEMORYSTATUSEX) 私有类型INT64 罗巴特 HiPart尽可能长 端型 私有类型MemoryStatutex 长度等于 只要 ulTotalPhys As INT64 ulAvailPhys As INT64 ulTotalPageFile作为INT64 文件名为INT64 UltotalVirtualAS INT64 与INT64相同的虚拟文件 ulAvailExtendedVirtual作为INT64 端型 专用子表单_加载() Me.AutoRedraw=真 调用打印信息 端接头 私有子打印信息() 将udtMemStatEx设置为MemoryStatuex 我 udtMemStatEx.dwLength=Len(udtMemStatEx) 调用GlobalMemoryStatusEx(udtMemStatEx) Me.打印“总物理内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalPhys.LoPart,udtmstatex.ulTotalPhys.HiPart))和“(&Round(CLargeInt(udtmstatex.ulAvailPhys.LoPart,udtmstatex.ulAvailPhys.HiPart))和“%Free” Me.打印“可用物理内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailPhys.LoPart,udtmstatex.ulAvailPhys.HiPart)) Me.打印“总虚拟内存”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalVirtual.LoPart,udtMemStatEx.ulTotalVirtual.HiPart)) Me.Print“Available virtual memory”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailVirtual.LoPart,udtMemStatEx.ulAvailVirtual.HiPart)) Me.Print“总页面文件”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulTotalPageFile.LoPart,udtMemStatEx.ulTotalPageFile.HiPart)) Me.Print“Available page file”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailPageFile.LoPart,udtmstatex.ulAvailPageFile.HiPart)) Me.Print“可用扩展页面文件”+vbTab+NumberInKB(CLargeInt(udtmstatex.ulAvailExtendedVirtual.LoPart,udtMemStatEx.ulAvailExtendedVirtual.HiPart)) Me.Print“Memory Load”+vbTab+CStr(udtMemStatEx.dwMemoryLoad)+“%” 端接头 '此函数将大整数数据类型转换为双精度 专用函数CLargeInt(Lo为长,Hi为长)为双精度 将dblLo设置为双精度 双精度dblHi 如果Lo<0,则 dblLo=2^32+Lo 其他的 dblLo=Lo