【发布时间】:2010-01-19 20:21:45
【问题描述】:
我很好奇 WMI 的工作原理。特别是,我目前正在使用 WMI 通过“Select * from Win32_DesktopMonitor”查询物理监视器,因为它始终为我提供跨多个平台的正确结果,因为我想知道物理监视器的数量,而不是由函数返回的虚拟监视器,例如GetSystemMetrics 和 EnumDisplays。我还探索了 SetupAPI,它像设备管理器一样检查注册表,但在 Vista 之前的 Windows 版本中会错误地返回幻像监视器。
我曾尝试使用 wbemtest.exe 生成的 procmon.exe 和我自己的可执行文件进行查询来跟踪 API 调用和观察事件,但没有找到太多。
如果您能深入了解 WMI 的内部工作原理、更深入地跟踪 API 调用或计算监视器的可靠方法,我们将不胜感激。
小笔记:使用 C++
【问题讨论】:
-
经过一些研究,看起来 WmiPrvSE.exe 处理了我正在处理的查询,但不应该有一个简单的方法来模仿它的行为。此外,无论如何,WMI 在计算监视器时似乎并不完全准确,因为驱动程序可能会撒谎。