Я пытаюсь получить информацию обо всех различных мониторах (и их адаптерах), присутствующих в системе. До сих пор мои попытки использовать EnumDisplayDevices
, чтобы перечислить все мониторы, отлично поработали - он нашел два, первый из которых - "\\.\DISPLAY1\Monitor0"
(второй - только 2 и 1 соответственно, но это не имеет отношения к этому вопросу). В любом случае, я попытался называть его EnumDisplaySettingsEx
, передавая имя монитора, как указано выше, но он всегда терпит неудачу. Вызовы с нулевым параметром имени преуспевают, но возвращенная структура DEVMODE
говорит, что dmDeviceName
- это «cdd», который, я очень сомневаюсь, точна. Что я делаю не так?Трудности с p/invoke и EnumDisplaySettingsEx
О, и я пробовал использовать EnumDisplaySettings
(не-Ex один), и это даже не работает с параметром нулевого имени.
подписи P/Invoke (Ex слегка изменен с одного на Pinvoke.net в верчение попытке заставить его работать):
[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
определяется в http://www.pinvoke.net/default.aspx/Structures/DEVMODE.html. EdsDwFlags
на данный момент всегда равен нулю. iModeNum
- -1 (для текущих настроек).
И по какой-то причине StackOveflow не позволит мне прикреплять тег C# к этому сообщению.