95の場合、CPU使用率の計測は“HKEY_DYN_DATA\PerfStats\StartStat\KERNEL\CPUUsage”というレジストリにアクセスすることによって開始され、“HKEY_DYN_DATA\PerfStats\StopStat\KERNEL\CPUUsage”というレジストリにアクセスすることによって終了する。左記レジストリのアクセスによって計測開始後、“HKEY_DYN_DATA\PerfStats\StatData\KERNEL\CPUUsage"というレジストリの値が、現在のCPU使用率を表す。
なお下記サンプルでは、Long型の値を読み取るRegQueryValueExのために“RegQueryLongEx”という別名をつけているので注意。StartStatおよびStopStatに対するアクセスもこれを流用している。
レジストリのオープンと、値の読み取りは、この組み合わせでなければならない。例えば、“PerfStats\StartStat\KERNEL”をオープンした後に“CPUUsage”の値を読みとろうとしてもエラーとなる。
'宣言の例 Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" ( _ ByVal hKey As Long, _ ByVal SubKeyName As String, _ ByVal Reserved As Long, _ ByVal AccessMask As Long, _ ByRef hResultKey As Long) As Long Declare Function RegQueryLongEx Lib "advapi32" Alias "RegQueryValueExA" ( _ ByVal hKey As Long, _ ByVal ValueName As String, _ ByVal pReserved As Long, _ ByVal pValueType As Long, _ ByRef LongValue As Long, _ ByRef ValueSize As Long) As Long Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long Declare Function Sleep Lib "kernel32" (ByVal s As Long) As Long Public Const HKEY_DYN_DATA As Long = &H80000006 Public Const KEY_QUERY_VALUE As Long = 1 Public Const SIZE_OF_LONG As Long = 4 'ボタンが押されたら、CPU使用率を一秒間計測し、結果を表示 Private Sub Command1_Click() Dim CPUUsage As Long Dim ValueSize As Long Dim hKey As Long 'HKEY_DYN_DATAの“\PerfStats\StartStat\KERNEL\CPUUsage”という値を 'クエリーすることにより、CPU使用率の計測が開始される。 ValueSize = SIZE_OF_LONG RegOpenKeyEx HKEY_DYN_DATA, "PerfStats\StartStat", 0, KEY_QUERY_VALUE, hKey RegQueryLongEx hKey, "KERNEL\CPUUsage", 0, 0, CPUUsage, ValueSize RegCloseKey hKey '一秒間計測 Sleep 1000 '実際のCPU使用率は“\PerfStats\StatData\KERNEL\CPUUsage"という値で '取得できる。 ValueSize = SIZE_OF_LONG RegOpenKeyEx HKEY_DYN_DATA, "PerfStats\StatData", 0, KEY_QUERY_VALUE, hKey RegQueryLongEx hKey, "KERNEL\CPUUsage", 0, 0, CPUUsage, ValueSize RegCloseKey hKey '計測結果を表示 MsgBox CPUUsage & "%" '計測を終了するには、“\PerfStats\StopStat\KERNEL\CPUUsage”という '値をクエリーする。 ValueSize = SIZE_OF_LONG RegOpenKeyEx HKEY_DYN_DATA, "PerfStats\StopStat", 0, KEY_QUERY_VALUE, hKey RegQueryLongEx hKey, "KERNEL\CPUUsage", 0, 0, CPUUsage, ValueSize RegCloseKey hKey End Sub