コード例 #1
0
ファイル: DisplayDevices.cs プロジェクト: sauryjorge/OnlyT
        /// <summary>
        /// Gets system display devices
        /// </summary>
        /// <returns>Collection of DisplayDeviceData</returns>
        public static IEnumerable <DisplayDeviceData> ReadDisplayDevices()
        {
            var result = new List <DisplayDeviceData>();

            NativeMethods.DISPLAY_DEVICE d = new NativeMethods.DISPLAY_DEVICE();
            d.cb = Marshal.SizeOf(d);

            for (uint id = 0; NativeMethods.EnumDisplayDevices(null, id, ref d, 0); id++)
            {
                if (d.StateFlags.HasFlag(NativeMethods.DisplayDeviceStateFlags.AttachedToDesktop))
                {
                    d.cb = Marshal.SizeOf(d);

                    NativeMethods.EnumDisplayDevices(d.DeviceName, 0, ref d, 0);

                    if (d.StateFlags.HasFlag(NativeMethods.DisplayDeviceStateFlags.AttachedToDesktop))
                    {
                        result.Add(new DisplayDeviceData
                        {
                            Name         = d.DeviceName,
                            DeviceId     = d.DeviceID,
                            DeviceString = d.DeviceString,
                            DeviceKey    = d.DeviceKey
                        });
                    }
                }

                d.cb = Marshal.SizeOf(d);
            }

            return(result);
        }
コード例 #2
0
ファイル: DisplayDevices.cs プロジェクト: thinidus/OnlyT
        /// <summary>
        /// Gets system display devices
        /// </summary>
        /// <returns>Collection of DisplayDeviceData</returns>
        public static IEnumerable <DisplayDeviceData> ReadDisplayDevices()
        {
            Log.Logger.Information("Reading display devices");

            var result = new List <DisplayDeviceData>();

            for (uint id = 0; ; id++)
            {
                Log.Logger.Information($"Seeking device {id}");

                NativeMethods.DISPLAY_DEVICE device1 = new NativeMethods.DISPLAY_DEVICE();
                device1.cb = Marshal.SizeOf(device1);

                bool rv = NativeMethods.EnumDisplayDevices(null, id, ref device1, 0);
                Log.Logger.Information($"EnumDisplayDevices retval = {rv}");

                if (!rv)
                {
                    break;
                }

                Log.Logger.Information($"Device name: {device1.DeviceName}");

                if (device1.StateFlags.HasFlag(NativeMethods.DisplayDeviceStateFlags.AttachedToDesktop))
                {
                    Log.Logger.Information("Device attached to desktop");

                    NativeMethods.DISPLAY_DEVICE device2 = new NativeMethods.DISPLAY_DEVICE();
                    device2.cb = Marshal.SizeOf(device2);

                    rv = NativeMethods.EnumDisplayDevices(device1.DeviceName, 0, ref device2, 0);
                    Log.Logger.Information($"Secondary EnumDisplayDevices retval = {rv}");

                    if (rv && device2.StateFlags.HasFlag(NativeMethods.DisplayDeviceStateFlags.AttachedToDesktop))
                    {
                        Log.Logger.Information($"Display device data = {device2.DeviceName}, {device2.DeviceID}");

                        result.Add(new DisplayDeviceData
                        {
                            Name         = device2.DeviceName,
                            DeviceId     = device2.DeviceID,
                            DeviceString = device2.DeviceString,
                            DeviceKey    = device2.DeviceKey
                        });
                    }
                }

                device1.cb = Marshal.SizeOf(device1);
            }

            return(result);
        }