2010-08-01 27 views
1

Je tente de récupérer des informations sur tous les différents moniteurs (et leurs adaptateurs) présents sur un système. Jusqu'à présent, mes tentatives d'utiliser EnumDisplayDevices pour lister tous les moniteurs a fonctionné très bien - il en a trouvé deux, le premier étant "\\.\DISPLAY1\Monitor0" (le second est juste 2 et 1, respectivement, mais ce n'est pas pertinent pour cette question). Quoi qu'il en soit, j'ai alors tenté d'appeler le EnumDisplaySettingsEx, en passant le nom du moniteur comme ci-dessus, mais il échoue toujours. Les appels avec un paramètre de nom nul aboutissent, mais la structure DEVMODE renvoyée indique que le dmDeviceName est "cdd", ce dont je doute fortement qu'il soit exact. Qu'est-ce que je fais mal?Difficultés avec p/invoke et EnumDisplaySettingsEx

Oh, et j'ai essayé d'utiliser EnumDisplaySettings (le non-Ex) et cela ne fonctionne même pas avec le paramètre de nom nul.

P/Invoke (signatures légèrement modifiée de celle de Ex sur pinvoke.net dans une tentative pour l'obtenir flailing au travail):

[DllImport("user32.dll")] 
public static extern bool EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode); 
[DllImport("user32.dll", CharSet = CharSet.Ansi)] 
public static extern bool EnumDisplaySettingsEx([MarshalAs(UnmanagedType.LPStr)]string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode, EdsDwFlags dwFlags); 

DEVMODE est défini à http://www.pinvoke.net/default.aspx/Structures/DEVMODE.html. EdsDwFlags pour l'instant est toujours zéro. iModeNum est -1 (pour les paramètres actuels).

Et pour une raison quelconque, StackOveflow ne me laissera pas attacher un tag C# à cet article.

Répondre

1

Je suis un idiot, vous êtes censé passer un adaptateur d'affichage à cette fonction, pas un moniteur. Passant juste "\\.\DISPLAY1" a bien fonctionné.

Je reçois toujours des déchets pour le champ dmDeviceName, donc j'apprécierais toute suggestion quant à la façon dont je me suis trompé.