どのオブジェクトをモニタ対象とするかです。これはプログラム内ではどのように表すことになるのでしょうか。オブジェクトのハンドルを取得するといったような作業は一切行うことはありません。パフォーマンスデータ取得の作業に入ることができるのです。実際にはこれを完全に把握するのは難しいものがあります。文字列を指定するにも検討が尽かないというが実際のところでしょう。その数と名前を把握しておくことは重要であるといえます。次に示すPdhEnumObjectsは、オブジェクトのリストを返します。bRefresh);szDataSourceは、データソースを表す文字列を指定します。基本的にはこの引数はNULLに指定し、オブジェクト(パフォーマンスDLL)のデータを照会します。szMachineNameは、オブジェクトを列挙するコンピュータ名を指定します。NULLを指定した場合、ローカルコンピュータが参照されることになります。mszObjectListは、列挙されたオブジェクトのリストを格納するバッファを指定します。それ以上オブジェクトが存在しないことを意味しています。pcchBufferLengthは、mszObjectListを格納するバッファのサイズを指定します。このサイズを基に動的にバッファを確保するようなことも可能です。PdhEnumObjectの呼び出しでは、重要な意味は持たないと思われます。キャッシュ(ローカルに保存)されたリストを参照したい場合はFALSEを指定します。関数の処理時間を短くすることができます。PDHの関数は成功時に、ERROR_SUCCESSを返します。個々のオブジェクトを取り出し、それをリストボックスに追加します。PdhEnumObjectsの呼び出しには、多少の時間がかかります。PDHを利用するには、pdh.hのインクルードとpdh.libへのリンクが必要です。リストボックスに追加されています。普段聞き慣れないオブジェクトの照会も容易です。次のコードは、PdhEnumObjectsの呼び出し部分です。第4引数に要求するので、まずこれをdwObjectSizeに代入します。次はそれを1つずつ走査することになります。単純にLPTSTR型変数を使って表現することができます。リストの終端に到達したと判断することができます。NULL文字を考慮した文字列の長さは、lstrlenの戻り値に+1することで取得できます。どのように取得するかという意味合いを含んでいます。このリアルタイム形式が採用されることになっています。パフォーマンスデータ照会の対象がログファイルとなります。リアルタイム形式であるかを調べることができます。データソースを文字列ではなくハンドルで表すことを可能にしました。PdhEnumObjectsにはPdhEnumObjectsHという別の関数があります。データソースに指定するような場合は、これは大きな最適化に繋がるといえます。基本的にこれはどちらを選んでも大差はないかと思われます。得られるデータの値はどちらも同じになると思われます。PdhSetDefaultRealTimeDataSourceを呼び出します。