c#设置系统分辨率

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013934107/article/details/79974771
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows;
using System.Runtime.InteropServices;


namespace SetWindowsResolution
{
    class Program
    {
        static string[] KeyValues = { "dmPelsWidth", "dmPelsHeight", "dmDisplayFrequency", "dmBitsPerPel" };
        static string[] OldKeyValues = { "dmPelsWidth", "dmPelsHeight", "dmDisplayFrequency", "dmBitsPerPel" };
        static int Main(string[] args)
        {
            if((ReadConfig("config.ini"))==false)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Read Config.ini Information Err!!");
                Console.ResetColor();
                return 1;
            }
            SetResolution();
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Windows System Resolution Finish!!");
            Console.ResetColor();
            return 0;
        }


        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; 
        }
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags); 
        static void SetResolution()
        {
            long RetVal = 0;
            DEVMODE dm = new DEVMODE();
            dm.dmSize=(short)Marshal.SizeOf(typeof(DEVMODE));
            dm.dmPelsWidth = Convert.ToInt32(KeyValues[0]);
            dm.dmPelsHeight = Convert.ToInt32(KeyValues[1]);
            dm.dmDisplayFrequency = Convert.ToInt32(KeyValues[2]);
            dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
            RetVal = ChangeDisplaySettings(ref dm,0);
        }


        static bool ReadNowResolution()
        {
            bool Flag = false;
            
            return Flag;
        }


        static bool ReadConfig(string FileName)
        {
            bool Flag = false;
            try
            {
                FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
                StreamReader sr = new StreamReader(fs,Encoding.Default);
                string Temp = string.Empty;
                string[] FccStr = { "dmPelsWidth", "dmPelsHeight", "dmDisplayFrequency", "dmBitsPerPel" };
                while((Temp=sr.ReadLine())!=null)
                {
                    string[] Array = Temp.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                    int n = 0;
                    foreach(string str in FccStr)
                    {
                        if(str==Array[0].Trim())
                        {
                            KeyValues[n] = Array[1];
                        }
                        n++;
                    }
                }
                sr.Close();
                fs.Close();
                Flag = true;
            }
            catch(Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                Flag = false;
                Console.ResetColor();
                return Flag;
            }
            return Flag;
        }
    }

}




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页