c#下利用winAPI来实现扩展屏的分辨率设置、方向切换等

时间:2025-04-17 14:06:41

1、背景:头显设备连接电脑作为扩展屏使用,由于显示屏厂家的原因,拿过来初始脸上电脑的话是横向的,需要手动控制去设置成纵向,这样做成产品的话,体验比较差;

在网上找到了一种方法利用 ChangeDisplaySettingsEx配合DEVMODE结构体来实现上述功能;

            [DllImport("")]
            public static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);//获取屏幕信息
            [DllImport("")]
            public static extern int ChangeDisplaySettingsEx(string lpszDeviceName, [In] ref DEVMODE lpDevMode, IntPtr hwnd, int dwFlags, IntPtr lParam); //设置横竖屏
            [DllImport("", CharSet = )]
            private static extern long SetDisplayConfig(uint numPathArrayElements,IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags);  //这个函数用于设置屏幕的复制模式、或者扩展模式;

    public struct DEVMODE
        {
            [MarshalAs(, SizeConst = 32)]
            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 Point dmPosition;
            public int dmDisplayOrientation;
            public int dmDisplayFixedOutput;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;


            [MarshalAs(, SizeConst = 32)]
            public string dmFormName;


            public short dmLogPixels;
            public short 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;
        };

DEVMODE结构体,和****上查到的是一样的;

demo:/detail/bossaiaboy/9407945