/// <summary> /// A private helper method used to retrieve current display settings as a DEVMODE object. /// </summary> /// <remarks> /// Internally calls EnumDisplaySettings() native function with the value ENUM_CURRENT_SETTINGS (-1) to retrieve the current settings. /// </remarks> private static SafeNativeMethods.DEVMODE GetDeviceMode(DisplayDevice dev, bool def) { SafeNativeMethods.DEVMODE mode = new SafeNativeMethods.DEVMODE(); mode.Initialize(); if (def) { if (SafeNativeMethods.EnumDisplaySettings(null, SafeNativeMethods.ENUM_CURRENT_SETTINGS, ref mode)) return mode; else //throw new InvalidOperationException(GetLastError()); throw new InvalidOperationException("Hello"); } else { //if (SafeNativeMethods.EnumDisplaySettings(dev.DeviceName, 0, ref mode)) if(SafeNativeMethods.EnumDisplaySettingsEx(dev.DeviceName, -2, ref mode, (uint)CDSFlags.CDS_RESET) ) return mode; else //throw new InvalidOperationException(GetLastError()); throw new InvalidOperationException("Hello1"); } }
/// <summary> /// Enumerates all supported display modes. /// </summary> /// <remarks> /// Internally calls EnumDisplaySettings() native function. /// Because of the nature of EnumDisplaySettings() it calls it many times and uses the <code>yield return</code> statement to simulate an enumerator. /// </remarks> public static IEnumerator<DisplaySettings> GetModesEnumerator(string devName) { SafeNativeMethods.DEVMODE mode = new SafeNativeMethods.DEVMODE(); mode.Initialize(); // mode.dmDeviceName = devName; int idx = 0; while (SafeNativeMethods.EnumDisplaySettingsEx(devName, idx, ref mode, 0)) { yield return CreateDisplaySettingsObject(idx++, mode); } }