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 |