Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }