以前パフォーマンスカウンターについて調べた時に書いたサンプルスクリプトです。どうぞ。
#uselib "pdh.dll"
#func PdhOpenQuery "PdhOpenQuery" int,int,int
#func PdhCloseQuery "PdhCloseQuery" int
#func PdhAddCounter "PdhAddCounterA" int,sptr,int,int
#func PdhCollectQueryData "PdhCollectQueryData" int
#func PdhGetFormattedCounterValue "PdhGetFormattedCounterValue" int,int,int,int
screen 0, 400,101
onexit gosub *exit
alloc CounterValue, 16
PdhOpenQuery 0, 0, varptr(hQuery)
path = "\\Processor(_Total)\\% Processor Time"
PdhAddCounter hQuery, varptr(path), 0, varptr(hCounter)
PdhCollectQueryData hQuery
do
title "CPU使用率: "+strf("%3d%%", cpu)
pos 0,0 : gcopy 0, 10,0, 400-10,101
color 255,255,255 : boxf 400-10, 0, 400-1, 101-1
color 0,192, 0 : boxf 400-10, 101-1-cpu, 400-1, 101-1
wait 200
PdhCollectQueryData hQuery
PdhGetFormattedCounterValue hCounter, 0x100, 0, varptr(CounterValue)
cpu = lpeek(CounterValue, 8)
until( exit_sw )
PdhCloseQuery hQuery
end
*exit
exit_sw = 1
return
注意点
得られる数値は、前回のPdhCollectQueryData呼び出しから、
今回のPdhCollectQueryData呼び出しまでの間の、平均値です。たぶん。
だから、PdhCollectQueryDataの呼び出しと、PdhCollectQueryDataの呼び出しの間に、
いくらかの時間をおいて取得すべき。
上のサンプルでは約2秒間の計測値になってます。(wait 200)