我試圖檢索系統上存在的所有不同監視器(及其適配器)上的信息。到目前爲止,我嘗試使用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#標籤到這篇文章。