C#遍历设置计算机分辨率

来源:互联网 发布:索尼xperiaz1手机网络 编辑:程序博客网 时间:2024/06/05 20:56
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using System.Threading;namespace CPResolution{    public enum DMDO  {        DEFAULT = 0,        D90 = 1,        D180 = 2,        D270 = 3    }      [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]  struct DEVMODE    {        public const int DM_DISPLAYFREQUENCY = 0x400000;        public const int DM_PELSWIDTH = 0x80000;        public const int DM_PELSHEIGHT = 0x100000;        private const int CCHDEVICENAME = 32;        private const int CCHFORMNAME = 32;        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHDEVICENAME)]        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 DMDO dmDisplayOrientation;        public int dmDisplayFixedOutput;        public short dmColor;        public short dmDuplex;        public short dmYResolution;        public short dmTTOption;        public short dmCollate;        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHFORMNAME)]        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;    }       class Program    {        [DllImport("user32.dll", CharSet=CharSet.Auto)]        static extern int ChangeDisplaySettings( [In] ref DEVMODE lpDevMode, int dwFlags);        [DllImport("user32.dll", CharSet = CharSet.Auto)]        static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);        static List<DEVMODE> ResolutionMode = new List<DEVMODE>();        static void ChangeScreenResolution(int PelsWidth, int PelsHeight, int Frequency)        {            //Form1 t = new Form1();            long RetVal = 0;            DEVMODE dm = new DEVMODE();            dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));            dm.dmPelsWidth = PelsWidth;            dm.dmPelsHeight = PelsHeight;            dm.dmDisplayFrequency = Frequency;            dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;            RetVal = ChangeDisplaySettings(ref dm, 0);            if (RetVal == 0)            {                Console.WriteLine("width:" + PelsWidth + ",Height:" + PelsHeight + ",Frequency:" + Frequency);            }                              }        private static List<DEVMODE> GetFullDisplaySetting()        {            DEVMODE lpDevMode = new DEVMODE();            lpDevMode.dmDriverExtra = 0;            lpDevMode.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));            lpDevMode.dmDriverExtra = 0;            try            {                int index = 0;                while (EnumDisplaySettings(null, index, ref lpDevMode))                {                    if (lpDevMode.dmPelsHeight >= 600 && lpDevMode.dmPelsWidth >= 800)                    {                        ResolutionMode.Add(lpDevMode);                    }                    index++;                                   }                return ResolutionMode;            }            catch            {                return null;            }        }        static void Main(string[] args)        {            List<DEVMODE> mode = GetFullDisplaySetting();                       foreach(DEVMODE Reso in mode)            {                ChangeScreenResolution(Reso.dmPelsWidth,Reso.dmPelsHeight,Reso.dmDisplayFrequency);                Thread.Sleep(5000);            }                     }    }}



0 0
原创粉丝点击