1. 程式人生 > >c#下利用winAPI來實現擴充套件屏的解析度設定、方向切換等

c#下利用winAPI來實現擴充套件屏的解析度設定、方向切換等

1、背景:頭顯裝置連線電腦作為擴充套件屏使用,由於顯示屏廠家的原因,拿過來初始臉上電腦的話是橫向的,需要手動控制去設定成縱向,這樣做成產品的話,體驗比較差;

在網上找到了一種方法利用 ChangeDisplaySettingsEx配合DEVMODE結構體來實現上述功能;

            [DllImport("user32.dll")]
            public static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);//獲取螢幕資訊
            [DllImport("user32.dll")]
            public static extern int ChangeDisplaySettingsEx(string lpszDeviceName, [In] ref DEVMODE lpDevMode, IntPtr hwnd, int dwFlags, IntPtr lParam); //設定橫豎屏
            [DllImport("user32.dll", CharSet = CharSet.Unicode)]
            private static extern long SetDisplayConfig(uint numPathArrayElements,IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags);  //這個函式用於設定螢幕的複製模式、或者擴充套件模式;

    public struct DEVMODE
        {
            [MarshalAs(UnmanagedType.ByValTStr, 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(UnmanagedType.ByValTStr, 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結構體,和CSDN上查到的是一樣的;

demo:http://download.csdn.net/detail/bossaiaboy/9407945