2010-08-01 1 views
1

시스템에있는 다양한 모니터 (및 해당 어댑터)에 대한 정보를 검색하려고합니다. 지금까지, EnumDisplayDevices을 사용하여 모든 모니터를 나열하려고 시도한 결과 두 가지가 발견되었습니다. 첫 번째는 "\\.\DISPLAY1\Monitor0" (두 번째는 각각 2와 1이지만이 질문과 관련이 없습니다). 어쨌든, 나는 위와 같이 모니터 이름을 전달하면서 EnumDisplaySettingsEx을 호출하려고 시도했지만 항상 실패합니다. null 이름 매개 변수를 사용하는 호출은 성공하지만 DEVMODE 구조가 반환되면 dmDeviceName은 "cdd"라고 말하면서 내가 정확하다고 의심합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?p/invoke 및 EnumDisplaySettingsEx의 어려움

아, 그리고 EnumDisplaySettings (Ex가 아닌 것)을 사용해 보았는데 null name 매개 변수로도 작동하지 않습니다.

P/호출 서명 (예의 약간은 일을 얻을 수있는 떨고 시도 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); 

DEVMODEhttp://www.pinvoke.net/default.aspx/Structures/DEVMODE.html에서 정의된다. 현재 EdsDwFlags은 항상 0입니다. iModeNum은 -1입니다 (현재 설정의 경우).

그리고 StackOverflow는이 게시물에 C# 태그를 첨부 할 수 없습니다.

답변

1

난 당신이 기능이 아닌 모니터디스플레이 어댑터을 통과하는 거 야, 바보 야. 그냥 "\\.\DISPLAY1"을 전달하면 정상적으로 작동합니다.

그래도 나는 dmDeviceName 필드에 대해 쓰레기를 돌려 받고 있습니다. 그래서 내가 잘못 생각한 것에 대해 어떤 제안이라도 고맙게 생각합니다.