2010-01-19 4 views
0

Je suis curieux de savoir comment fonctionne WMI. En particulier, je suis actuellement en utilisant WMI pour interroger les moniteurs physiques via "Select * from Win32_DesktopMonitor" car il m'a toujours donné le résultat correct sur plusieurs plates-formes puisque je veux connaître le nombre de moniteurs physiques et non moniteurs retournés par des fonctions comme GetSystemMetrics et EnumDisplays. J'ai également exploré le SetupAPI, qui inspecte le registre comme le Gestionnaire de périphériques, mais peut retourner de manière incorrecte des moniteurs fantômes dans la version Vista de Windows.Travaux internes de WMI?

J'ai essayé de suivre les appels d'API et de regarder les événements avec procmon.exe fait par wbemtest.exe et mes propres exécutables effectuant des requêtes, mais je n'ai pas trouvé grand-chose.

Tout aperçu du fonctionnement interne de WMI, un suivi plus approfondi des appels d'API ou des méthodes fiables de comptage des moniteurs seraient appréciés.

Remarques mineures: Travailler avec C++

+0

Après quelques recherches, il ressemble WMIPRVSE.EXE gère les requêtes que je traite, mais il ne devrait pas être un moyen facile d'imiter son comportement. En outre, il semble que WMI n'est pas tout à fait exact lors du comptage des moniteurs, puisque les conducteurs peuvent mentir. – chromic

Répondre

1

Il parle aux pilotes de périphériques, personne ne sait mieux ce que le matériel est disponible. Vous pouvez en savoir plus sur dans ce Microsoft article.

2

Il est également intéressant de vérifier la qualification de MappingStrings (le cas échéant) pour les propriétés de la classe qui vous intéressent pour Win32_DesktopMonitor, par exemple:

DeviceId.
Win32API | GDI Windows | Hmonitor

InstallDate :
MIF.DMTF | ComponentID | 001,5

MonitorManufacturer:
Win32Registry

MonitorType:
Win32Registry

PixelsPerXLogicalInch:
Win32API | Contexte de l'appareil Fonctions | GetDeviceCaps

+0

Ah, c'est très instructif, merci! – chromic