如何在 VB 6 代码中获取 CPU 和内存使用情况?谢谢!
问问题
13365 次
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
于 2009-09-10T11:29:57.333 回答