Win9XでCPU負荷を取得するには

<APIでは不可能な処理が可能に>

概 要


Win9xではCPU負荷を取得するAPIは用意されていない代わりにレジストリにCPU負荷が随時書き込まれているようです。
そこで、その値を読み出すことでWin9xでCPU負荷を取得することが可能になります。

取 得 手 順

1

HKEY_DYN_DATA\PerfStats\StartSrvのKERNELキーをオープンし、データ読み出し

2

HKEY_DYN_DATA\PerfStats\StartStatのKERNEL\CPUUsageキーをオープンし、データ読み出し

3

随時HKEY_DYN_DATA\PerfStats\StatDataのKERNEL\CPUUsageキーからデータを読み出す(CPU負荷)

4

HKEY_DYN_DATA\PerfStats\StartSrvのKERNELキーをクローズ

5

HKEY_DYN_DATA\PerfStats\StartStatのKERNEL\CPUUsageキーをクローズ

サ ン プ ル プ ロ グ ラ ム

まず、VisualBasicを起動してプロジェクトを新しく作成してください。まず、フォームにラベルおよびタイマーを配置し、以下のコードを貼り付け実行してください。

動作確認:Visual Basic 5.0(Visual Basic 4.0でも問題なく動作するはずです),Windows98

Option Explicit

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)
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey&) As Long
Private Declare Function RegOpenKey Lib "advapi32" Alias "RegOpenKeyA" (ByVal hKey&, ByVal lpSubKey$, phkResult&) As Long

Private RegKey1 As Long
Private RegKey2 As Long
Private RegKey3 As Long
Private BufSize As Long

Private Sub Form_Load()
Dim val As Integer

Timer1.Interval = 500

RegOpenKey &H80000006, "PerfStats\StartSrv", RegKey3
RegOpenKey &H80000006, "PerfStats\StartStat", RegKey2
RegQueryValueEx RegKey3, "KERNEL", 0&, 0&, val, BufSize
RegQueryValueEx RegKey2, "KERNEL\CPUUsage", 0&, 0&, val, BufSize
RegOpenKey &H80000006, "PerfStats\StatData", RegKey1
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
RegCloseKey RegKey1
RegCloseKey RegKey2
RegCloseKey RegKey3
End Sub

Private Function GetCPUUsage() As Integer
Dim val As Integer

RegQueryValueEx RegKey1, "KERNEL\CPUUsage", 0&, 0&, val, BufSize
GetCPUUsage = val
End Function

Private Sub Timer1_Timer()
Label1.Caption = Str(GetCPUUsage) & "%"
End Sub

トップに戻る
Visual Basicワンポイントテクニック目次に戻る

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル