在 Windows 上使用 C++ 访问最大输入延迟

Accessing Max Input Delay with C++ on Windows

我无法使用 C++ 从 Windows 性能计数器获取某些数据。我将通过声明我是 C++ 和 Windows 开发的新手来开始我的问题,但我已经在这个问题上花了一些时间,所以我对我在这里讨论的概念很熟悉。

问题:

我如何使用 Windows PDH(性能数据助手)C++ 获取 Max Input Delay——每个会话或每个进程?是否有某些性能计数器在 perfmon 之外不可用?

目前进度:

我用过this example to log some Performance Counters successfully, but the ones I want produce the error code 0xC0000BB8:“在系统上找不到指定的对象。”这让我感到困惑,因为我可以通过 perfmon 访问这些对象——“每个进程的用户输入延迟”或“每个会话的用户输入延迟”——很好。我什至按照我在问题中链接的文章中的概述在注册表中启用了计数器,尽管构建的 Windows 10 默认情况下应该启用它。我不得不做一个小改动来让代码编译,但我在测试期间只更改了 COUNTER_PATH 的定义,因为,代码再次像宣传的那样工作,除非涉及到我想访问的计数器.具体来说:

不编译:

CONST PWSTR COUNTER_PATH = L"\Processor(0)\% Processor Time";

是否编译并记录:

CONST wchar_t *COUNTER_PATH = L"\Processor(0)\% Processor Timee";

CONST PWSTR COUNTER_PATH = const_cast<PWSTR>(TEXT( "\Processor(0)\% Processor Time" ));

编译,但在运行时抛出错误代码 0xC0000BB8(这是我要访问的计数器):

CONST PWSTR COUNTER_PATH = const_cast<PWSTR>(TEXT( "\User Input Delay per Session(1)\Max Input Delay" ));

字符串中的硬编码会话 ID 1 用于故障排除,但也使用了通配符 (*) 和 0,结果相同。计数器路径与 perfmon 中显示的匹配。

基本上,我尝试使用此代码访问的所有性能计数器——大约 5 个完全不同的——已成功记录了请求的数据,但我想要访问的那个仍然是回避的。

我在 Microsoft Q&A 上问过同样的问题并得到了答案:

有问题的性能计数器需要管理员权限才能访问。我所要做的就是 运行 管理员命令提示符下的这个程序,这解决了我的问题。