2

現在の CPU 負荷を取得するユーティリティを作成しています。現時点で\Processor(_Total)\% process timeは、私のローカリゼーションで機能し、使用しています。多言語サポートのために、レジストリからカウンター名を取得していますPdhLookupPerfNameByIndex

コードは次のようになります

PdhLookupPerfNameByIndex(NULL, 6, processorTime, &cbPathSize);
PdhLookupPerfNameByIndex(NULL, 238, processor, &cbPathSize);
PDH_COUNTER_PATH_ELEMENTS elements = {NULL, processor, "_Total", NULL, NULL, processorTime};
PdhMakeCounterPath(&elements, fullPath, &cbPathSize, 0);

ハードコーディングされた定数 6 と 238 を削除したい。

と のインデックスを意味する定数はProcessorあり% process timeますか?

4

1 に答える 1

1

インデックスはシステムによって異なるため、動的に決定する必要があります。手順は、 PdhLookupPerfNameByIndex の MSDN ドキュメントで示唆されています。

  1. レジストリ値の REG_MULTI_SZ データを取得しますHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009\Counter

注: 「009」は英語を表します。そのキーは、異なる言語バージョンの Windows を搭載したマシン上でも常に存在します。

  1. 返されたデータで (英語の) カウンター/オブジェクト名を探します。形式: インデックスの後に英語のカウンター/オブジェクト名が続きます。例:

    6
    % プロセッサ時間

あなたのインデックスがあります。文字列から DWORD に変換し、PdhLookupPerfNameByIndex で使用するだけです。

于 2016-09-23T00:13:06.297 に答える