NonSoft

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


 サンプル(ソース/コード)
<このサンプルの概要>
以下のWin32Apiを使用したサンプルソースです。
(1)PdhOpenQuery
(2)PdhAddCounter
(3)PdhCollectQueryData
(4)PdhGetDoubleCounterValue
(5)PdhCloseQuery

VB.NETでApiを宣言(Declare)する場合はVB.NET用に変換する必要があります。
変換方法のサンプルはこちらです。VB6とVB.NETのAPI宣言(Declare)の違いを比較したサンプル

C#.NETでApiを宣言(Declare)する場合はC#.NET用に変換する必要があります。
変換方法のサンプルはこちらです。VB6とC#.NETのAPI宣言(Declare)の違いを比較したサンプル

その他のサンプルソースはこちらです。
Win32Api定義のサンプル サンプルソース

' 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)
    ' CPU使用率(100-dCpuIdle)を計算しLabelに表示
    Label1.Caption = Int(100 - dCpuIdle) & "%"
    ' PictureBoxを2つ重ねてCPU使用率のレベルメータ表示
    If Val(Label1.Caption) > 0 Then
        Picture2.Width = Picture1.Width * Int(100 - dCpuIdle) / 100
        Picture2.BackColor = "&H80000002"
    Else
        Picture2.BackColor = Picture1.BackColor
    End If
End Sub