2010-08-01 2 views
1

Я пытаюсь получить информацию обо всех различных мониторах (и их адаптерах), присутствующих в системе. До сих пор мои попытки использовать 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# к этому сообщению.

ответ

1

Я идиот, ты должен передать адаптер на дисплей этой функции, а не монитор. Прошел всего "\\.\DISPLAY1" работал отлично.

Я все еще получаю мусор обратно для поля dmDeviceName, поэтому, я буду благодарен за любые предложения относительно того, как я получил это неправильно.

 Смежные вопросы

  • Нет связанных вопросов^_^