如何在 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 回答