internal IEnumerable <DisplayDevice> GetDisplayDevices(bool?filterByValidity) { var device = Native.DeviceContext.Structures.DisplayDevice.Initialize(); var returned = new Dictionary <string, string>(); for (uint i = 0; DeviceContextApi.EnumDisplayDevices(null, i, ref device, 0); i++) { if (DevicePath.Equals(device.DeviceId)) { DisplayDevice displayDevice = null; var display = Native.DeviceContext.Structures.DisplayDevice.Initialize(); for (uint id = 0; DeviceContextApi.EnumDisplayDevices(device.DeviceName, id, ref display, 1); id++) { var isAttached = display.StateFlags.HasFlag(DisplayDeviceStateFlags.AttachedToDesktop); if (!filterByValidity.HasValue) { yield return(DisplayDevice.FromDeviceInformation(this, device, display)); } else if (filterByValidity.Value && isAttached) { if (!returned.ContainsKey(display.DeviceId) || !returned[display.DeviceId].Equals(display.DeviceKey)) { returned.Add(display.DeviceId, display.DeviceKey); yield return(DisplayDevice.FromDeviceInformation(this, device, display)); break; } } else if (!filterByValidity.Value) { if (!isAttached) { if (!returned.ContainsKey(display.DeviceId) || !returned[display.DeviceId].Equals(display.DeviceKey)) { displayDevice = DisplayDevice.FromDeviceInformation(this, device, display); } } else { displayDevice = null; break; } } display = Native.DeviceContext.Structures.DisplayDevice.Initialize(); } if (displayDevice != null) { returned.Add(displayDevice.DevicePath, displayDevice.DeviceKey); yield return(displayDevice); } } device = Native.DeviceContext.Structures.DisplayDevice.Initialize(); } }
internal IEnumerable <DisplayDevice> GetDisplayDevices(bool?filterByAvailability) { var returned = new Dictionary <string, string>(); var adapterIndex = -1; while (true) { adapterIndex++; var adapter = Native.DeviceContext.Structures.DisplayDevice.Initialize(); if (!DeviceContextApi.EnumDisplayDevices(null, (uint)adapterIndex, ref adapter, 0)) { break; } if (!DevicePath.Equals(adapter.DeviceId)) { continue; } var displayIndex = -1; while (true) { displayIndex++; var display = Native.DeviceContext.Structures.DisplayDevice.Initialize(); if (!DeviceContextApi.EnumDisplayDevices(adapter.DeviceName, (uint)displayIndex, ref display, 1)) { break; } var displayDevice = DisplayDevice.FromDeviceInformation(this, adapter, display); if (!filterByAvailability.HasValue) { yield return(displayDevice); } else if (displayDevice.IsAvailable == filterByAvailability.Value) { if (returned.ContainsKey(display.DeviceId) && returned[display.DeviceId].Equals(display.DeviceKey) ) { continue; } returned.Add(display.DeviceId, display.DeviceKey); yield return(displayDevice); } } } }