【问题标题】:Internal works of WMI?WMI的内部工作?
【发布时间】: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 在计算监视器时似乎并不完全准确,因为驱动程序可能会撒谎。

标签: windows wmi setupapi


【解决方案1】:

还值得检查您感兴趣的类属性的 MappingStrings 限定符(如果存在)。例如,对于 Win32_DesktopMonitor:

设备 ID:
Win32API|Windows GDI|HMONITOR

安装日期:
MIF.DMTF|组件ID|001.5

显示器制造商:
Win32注册表

显示器类型:
Win32注册表

PixelsPerXLogicalInch:
Win32API|设备上下文函数|GetDeviceCaps

【讨论】:

    【解决方案2】:

    它与设备驱动程序对话,没有人知道什么硬件可用。您可以在Microsoft article 中了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2011-08-29
      • 2015-08-21
      • 2014-01-22
      相关资源
      最近更新 更多