私はwinref.hで公開されているAPIを通じてPerfmonカウンターの値を収集するアプリケーションを持っています - Perfmonカウンターの値を収集するためには、PerfmonカウンターのIDを渡すRegQueryValueExW
興味があり、そのIDを取得するために、Perfmonカウンター名のリストをレジストリに問い合わせて、興味のあるものを探す必要がありますwinmon経由でperfmonカウンターIDを見つける
C++は私の選択の言語ではありませんが、その次は、おそらく構文エラーがたくさんで、不安定な例ですが、あなたのアイデアを得る:
DWORD IdProcessIndex = 0;
WCHAR* RawStrings = new WCHAR[ len ];
WCHAR* pCurrent;
DWORD nLenInChars;
// Get the name id of the "ID Process" counter
RegQueryValueExW(HKEY_PERFORMANCE_DATA, COUNTER009, 0, 0, (PBYTE)RawStrings, &len)
pCurrent = (WCHAR*)RawStrings;
while ((nLenInChars = wcslen(pCurrent)) != 0 && IdProcessIndex == 0)
{
WCHAR* pName;
pName = pCurrent + nLenInChars + 1;
if (wcscmp(pName, L"ID Process") == 0)
{
IdProcessIndex = _wtoi(pCurrent);
}
pCurrent = pName + wcslen(pName) + 1;
}
// Get data for the "ID Process" counter
WCHAR strIdProcessIndex[32];
_itow(nIdProcessIndex, strIdProcessIndex, 10);
RegQueryValueExW(HKEY_PERFORMANCE_DATA, strIdProcessIndex, NULL, NULL, (PBYTE)pData, &len)
トラブルはそれはいくつかのMac上でWindows CE開発キットがインストールされているhinesの場合は、名前プロセスIDという名前の2番目のperfmonカウンタがあるため、誤ったカウンタのIDが検出されます。
私は彼らがいる順番以外の方法を見分けることができません - 現時点では、一致する名前で見つけた最初のカウンタを取ることが最善の策だと思っています。 ?
(.NETまたはそのような何かにこれを移行するために、そのことはできません)
ありがとうございました - 私はIDが固定されていたことを認識していませんでした。これは事をもっと簡単にします! – Justin
うれしかったです。これは、組み込みのカウンタにのみ当てはまりますが、SQL Serverカウンタなど、Windows後にインストールされたカウンタには当てはまりません。 –