>「PdhGetFormattedCounterArray」で取得すれば良いのでしょうか?
複数登録したカウンタを一度に取得する命令では無い
指定したオブジェクトに複数のInstanceがある場合ワイルドカードが使用でき
複数のInstanceのカウンタ値を一括で取得する命令
この辺はHSPとは関係ないので他で聞く方が良いかも(自分も詳しいわけではないので・・・)
>cid=AddPerformanceCounter( 0, "LogicalDisk","*/*","% Disk Time"
の"*/*"がワイルドカードで使用できるInstance(この場合ローカルディスク)全てに
カウンタが設定される
GetPerformanceCounter命令の中ではPdhGetFormattedCounterArrayを使用してカウンタ値を取得してる
>もしかして「0」と「3」の意味が逆転してるのですか?
カウンタ毎に取得できる値のタイプが違うのが原因だと思う
%用のカウンタは規定で100%に制限されてるものと違うのがある
3を指定すると規定で100%に制限されるのを利用してるだけ
0は0x00008000(PDH_FMT_NOCAP100)を指定して上限を無くす。
なのでモジュール内の説明が間違ってる訳ではありません。
1は0x00001000(PDH_FMT_NOSCALE)指定して既定のスケールを使わない事で
"% Disk Time"の場合は100%に制限されるようです。
>あと「PhysicalDisk」と「LogicalDisk」の違いは何?
簡単に言うとディスク単位かディスク含むパリティー単位の違い
>ディスク0(C: D:)
>ディスク1(G:)
>ディスク2(F:)
は、PhysicalDiskの場合
0 C: D:
1 G:
2 F:
で、LogicalDiskの場合は
C:
D:
G:
F:
になる
モジュール内説明間違い
>//-------カウンタ値を受け取る--------
>//[GetProcessPerformanceCounter cdata, cid, strf_fmt, cr, byt]
は
//[GetPerformanceCounter cdata, cid, strf_fmt, cr]
でした
>//--------ワイルドカードを使用したパスを展開して取得------
>//[GetWildCardPath mszExpandedPathList, szWildCardPath, OCdel]
を
//[GetWildCardPath mszExpandedPathList, szWildCardPath, cr, OCdel]
に修正(たぶん修正途中で放置したから説明が修正されてなかった・・・他にもあるかも・・・)
NO.73104の
>//[GetCPUPerformanceCounter 受け取る変数に文字列型を使用, カウンタID指定, 改行せずに配列にする]
は GetPerformanceCounter (古い方で作ったサンプルを利用したから修正漏れ・・・)
http://cc.bingj.com/cache.aspx?q=PhysicalDisk&d=4636444473432195&mkt=ja-JP&setlang=ja-JP&w=kRmituhbsRI8aT-GZXShAAyUB7nIO6aF
に
>_Total インスタンスは、マルチディスク システムでの使用状況を正確に反映しないことがあるため、% Idle Time カウンタも併せて使うことが重要です。
とあるので同じクエリーに"% Disk Time"と"% Idle Time"を登録取得するサンプル
#include "mod_PdhPC.hsp"
//-------オブジェクト、インスタンス、カウンタを指定してパフォーマンスカウンタをクエリーに追加--------
//[cid=AddPerformanceCounter id, Object, Instance, Counter]
cid=AddPerformanceCounter( 0, "LogicalDisk","*/*","% Disk Time")
if stat<0 {dialog "カウンタが設定できなかった":end}
FullPath=refstr //カウンタフルパス代入
title FullPath
cid(1)=AddPerformanceCounter( 0, "LogicalDisk","*/*","% Idle Time") //同じクエリーID0にウンタを追加
if stat<0 {dialog "カウンタが設定できなかった":end}
//---------カウンタ値取得時の形式を指定--------
//[SetPCFMT cid, 6文字で小数点以下2文字, (省略_total含む), (省略1.0で割る), 既定のスケールを使わない]
SetPCFMT cid,"6.2",,,1
SetPCFMT cid(1),"6.2",,,1
//--------ワイルドカードを使用したパスを展開して取得------
//[GetWildCardPath インスタンスリストを取得する変数, ワイルドカードを含むカウンタパス, 改行して取得]
GetWildCardPath InstanceList, FullPath, 1,1
if stat=0 {dialog "Instanceリストが取得できなかった":end}
total=stat //リストの数
font "MS ゴシック",20
screen 0,300,20+20*total
gsel 0,2
Set_Wait=100
cdata=""
repeat
redraw 0
color 255,255,255
boxf
color
//-------カウンタ更新--------
//[CollectQueryData クエリーID0指定]
CollectQueryData 0
if stat<0 {dialog "カウンタの更新に失敗":end}
pos 0,20
mes InstanceList
repeat 2 //"% Disk Time"と"% Idle Time"で2回取得
pos 60+cnt*120,0
//-----AddPerformanceCounterで追加したパフォーマンスカウンタを受け取る------
//[GetPerformanceCounter 受け取る変数に文字列型を使用, 追加したカウンターIDを指定, 配列指定]
GetPerformanceCounter cdata, cid(cnt),0
i=stat
mes refstr
if i>0 {
repeat i
mes "["+cdata(cnt)+"]"
loop
}
loop
redraw 1
wait Set_Wait
loop