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 回答