Внутренние работы WMI?
Мне интересно, как работает WMI. В частности, в настоящее время я использую WMI для запроса физических мониторов через "Select * from Win32_DesktopMonitor", поскольку он последовательно дает мне правильный результат на нескольких платформах, так как я хочу знать количество физических мониторов, а не виртуальных мониторов, возвращаемых функциями, такими как GetSystemMetrics и EnumDisplays. Я также изучил SetupAPI, который проверяет реестр, как и диспетчер устройств, но может некорректно возвращать фантомные мониторы в до Windows Vista.
Я пытался отследить вызовы API и наблюдать за событиями с помощью procmon.exe, созданного wbemtest.exe, и моих собственных исполняемых файлов, выполняющих запросы, но не нашел много.
Любое понимание внутренней работы WMI, более глубокое отслеживание вызовов API или надежные способы подсчета мониторов приветствуются.
Незначительные замечания: Работа с C++
2 ответа
Также стоит проверить квалификатор MappingStrings (если он есть) для интересующих вас свойств класса. Для Win32_DesktopMonitor, например:
Идентификатор устройства:
Win32API | Windows GDI | HMONITOR
InstallDate:
MIF.DMTF | ComponentID | 001,5
MonitorManufacturer:
Win32Registry
MonitorType:
Win32Registry
PixelsPerXLogicalInch:
Win32API | Функции контекста устройства |GetDeviceCaps
Он говорит с драйверами устройства, никто не знает лучше, какое оборудование доступно. Вы можете прочитать больше об этой статье Microsoft.