NonSoft

CPUの使用率を表示するサンプル(VB6)


 サンプル(ソース/コード)
<このサンプルの概要>
CPUの使用率を表示するサンプルソースを作ってみました。
CPU使用率はCPUのアイドル率を取得して100から引く方法で求めています。
VB6のフォームにTimerを1つ、PictureBoxを2つ、Labelを1つ貼り付けてお試しください。

本サンプルのキーワードは以下のAPIです。
(1)PdhOpenQuery
(2)PdhAddCounter
(3)PdhCollectQueryData
(4)PdhGetDoubleCounterValue
(5)PdhCloseQuery

ちなみに、このサンプルで取得出来るCPUアイドル率は全てのコアの合計です。
複数のコアが存在する場合はコア数で割って平均を求める必要があります。
コア数はGetSystemInfoを使用しSYSTEM_INFOのdwNumberOfProcessorsで取得出来ます。

CPU使用率を表示する他のサンプルがありますので紹介します。
プロセス毎のCPU使用率を表示するサンプル(VB.NET)

CPU使用率を表示する関連ツールがありますので紹介します。
パフォーマンス表示SCRはプロセス毎のCPU使用率を表示するスクリーンセーバーです。
超ミニCPUメーターは最小限の機能、最小限のサイズでCPU使用率を表示します。

★フォームモジュール(Form1.frm)
' Timerを1つ、PictureBoxを2つ、Labelを1つ、
' Formに貼り付けてお試しください。
Private Declare Function PdhOpenQuery Lib "pdh" Alias "PdhVbOpenQuery" _
    (ByRef QueryHandle As Long) As Long
Private Declare Function PdhAddCounter Lib "pdh" Alias "PdhVbAddCounter" _
    (ByVal QueryHandle As Long, ByVal CounterPath As String, _
     ByRef CounterHandle As Long) As Long
Private Declare Function PdhCollectQueryData Lib "pdh" _
    (ByVal QueryHandle As Long) As Long
Private Declare Function PdhGetDoubleCounterValue Lib "pdh" Alias _
    "PdhVbGetDoubleCounterValue" (ByVal CounterHandle As Long, _
     ByRef CounterStatus As Long) As Double
Private Declare Function PdhCloseQuery Lib "pdh" _
    (ByVal QueryHandle As Long) As Long
Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)

Private hQuery As Long
Private hCounter As Long
Private lCounter As Long
Private dCpuIdle As Double

Private Sub Form_Load()
    ' Timerの設定
    Timer1.Interval = 1000
    Timer1.Enabled = True
    ' PictureBoxの設定
    Picture2.Left = Picture1.Left
    Picture2.Top = Picture1.Top
    Picture2.Width = Picture1.Width
    Picture2.Height = Picture1.Height
    Picture2.BackColor = "&H80000002"
    Picture2.ZOrder
    ' パフォーマンスデータのクエリーのオープン
    PdhOpenQuery hQuery
    ' パフォーマンスカウンタの追加(CPUのアイドル率を取得)
    PdhAddCounter hQuery, "\Process(Idle#0)\% Processor Time", hCounter
    ' パフォーマンスデータの収集
    PdhCollectQueryData hQuery
    ' 初期値の収集
    DoEvents
    Sleep 100
    Timer1_Timer
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' パフォーマンスデータのクエリーのクローズ
    PdhCloseQuery hQuery
End Sub

Private Sub Timer1_Timer()
    ' パフォーマンスデータの収集
    PdhCollectQueryData hQuery
    ' パフォーマンスカウンタの値取得
    dCpuIdle = PdhGetDoubleCounterValue(hCounter, lCounter)
    If dCpuIdle > 100 Then dCpuIdle = 100
    ' CPU使用率(100-dCpuIdle)を計算しLabelに表示
    Label1.Caption = CInt(100 - dCpuIdle) & "%"
    ' PictureBoxを2つ重ねてCPU使用率のレベルメータ表示
    If Val(Label1.Caption) > 0 Then
        Picture2.Width = Picture1.Width * CInt(100 - dCpuIdle) / 100
        Picture2.BackColor = "&H80000002"
    Else
        Picture2.BackColor = Picture1.BackColor
    End If
End Sub