Метод Win32_DesktopMonitor также возвращает только 1 монитор на моем компьютере с Vista. Хотя PnP ID настроен правильно.
Я быстро поиграл с API-интерфейсом EnumDisplayDevices, и, хотя кажется, что он детально обнаруживает детали адаптера (предположительно потому, что большинство людей не оставят его в качестве «Стандартного VGA» надолго), он возвращает только «Plug and Play Monitor "для подключенных мониторов.
Это перекликается с исследованиями, которые я проводил несколько лет назад (пришлось собрать некоторый код, чтобы помочь стереть эти воспоминания).
Это из обычной учетной записи пользователя. Если у вас есть надежный способ заставить EnumDisplayDevices возвращать PnP ID, даже в обычных пользовательских сеансах, я был бы заинтересован - в настоящее время мы выясняем, доступна ли какая-либо из этой информации для драйвера устройства.
Одна вещь, которую вы могли бы сделать, если запуск кода из сеанса # 0 недостаточно надежен, - это посмотреть, сможете ли вы порождать вспомогательный процесс (либо с помощью CreateProcessAsUser, либо с помощью COM с именами активации), который будет выполняться в контекст пользователя.