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 double に変換する関数と、数値を KB、MB、GB にフォーマットする関数もあります。

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

プライベートタイプ INT64
   LoPart As Long
   HiPart As Long
エンドタイプ

プライベート タイプ MEMORYSTATUSEX
   dwLength As Long
   dwMemoryLoad As Long
   INT64 としての ulTotalPhys
   INT64 としての ulAvailPhys
   INT64としてのulTotalPageFile
   INT64としてのulAvailPageFile
   ULTotalVirtual As INT64
   INT64 としての ulAvailVirtual
   ULAvailExtendedVirtual As INT64
エンドタイプ

Private Sub Form_Load()

   Me.AutoRedraw = True
   PrintRamInformation を呼び出す

サブ終了

Private Sub PrintRamInformation()
   Dim udtMemStatEx As MEMORYSTATUSEX

   Me.Cls

   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 データ型を double に変換します
Private Function CLargeInt(Lo As Long, Hi As Long) As Double
   Dim dblLo As Double
   Dim dblHi As Double

   Lo < 0 の場合
      dblLo = 2 ^ 32 + ロー
   そうしないと
      dblLo = ロー
   終了条件

   Hi < 0 の場合
      dblHi = 2 ^ 32 + ハイ
   そうしないと
      dblHi = こんにちは
   終了条件

   CLargeInt = dblLo + dblHi * 2 ^ 32

終了機能

パブリック関数 NumberInKB(ByVal vNumber As Currency) As String
   Dim strReturn As String

   ケースの 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 に答える