How to list available video modes using C#?

前端 未结 1 476
予麋鹿
予麋鹿 2020-11-28 14:10

I\'ve found nice examples using C++ (http://www.codeproject.com/KB/tips/resswitch.aspx), but not in C#.

Can someone help, please?

Edit: The exact function th

相关标签:
1条回答
  • 2020-11-28 14:47

    If you mean video modes are available resolutions, try to invoke EnumDisplaySettingsEx

    details can be found here:

    http://msdn.microsoft.com/en-us/library/dd162612(VS.85).aspx

    small program that lists available resolutions:

    using System;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace ListResolutions
    {
    
        class Program
        {
            [DllImport("user32.dll")]
            public static extern bool EnumDisplaySettings(
                  string deviceName, int modeNum, ref DEVMODE devMode);
            const int ENUM_CURRENT_SETTINGS = -1;
    
            const int ENUM_REGISTRY_SETTINGS = -2;
    
            [StructLayout(LayoutKind.Sequential)]
            public struct DEVMODE
            {
    
                private const int CCHDEVICENAME = 0x20;
                private const int CCHFORMNAME = 0x20;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
                public string dmDeviceName;
                public short dmSpecVersion;
                public short dmDriverVersion;
                public short dmSize;
                public short dmDriverExtra;
                public int dmFields;
                public int dmPositionX;
                public int dmPositionY;
                public ScreenOrientation dmDisplayOrientation;
                public int dmDisplayFixedOutput;
                public short dmColor;
                public short dmDuplex;
                public short dmYResolution;
                public short dmTTOption;
                public short dmCollate;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
                public string dmFormName;
                public short dmLogPixels;
                public int dmBitsPerPel;
                public int dmPelsWidth;
                public int dmPelsHeight;
                public int dmDisplayFlags;
                public int dmDisplayFrequency;
                public int dmICMMethod;
                public int dmICMIntent;
                public int dmMediaType;
                public int dmDitherType;
                public int dmReserved1;
                public int dmReserved2;
                public int dmPanningWidth;
                public int dmPanningHeight;
    
            }
    
            static void Main(string[] args)
            {            
                    DEVMODE vDevMode = new DEVMODE();
                    int i = 0;
                    while (EnumDisplaySettings(null, i, ref vDevMode))
                    {
                        Console.WriteLine("Width:{0} Height:{1} Color:{2} Frequency:{3}",
                                                vDevMode.dmPelsWidth,
                                                vDevMode.dmPelsHeight,
                                                1 << vDevMode.dmBitsPerPel,         vDevMode.dmDisplayFrequency
                                            );
                    i++;
                    }
            }
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题