zoukankan      html  css  js  c++  java
  • C#对屏幕分辨率的操作

    winform应用程序

    1.新建Resolution.cs类

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace ScreenResolution
    {
        public class Resolution
        {
            public int autoWidth = Screen.PrimaryScreen.Bounds.Width;
            public int autoHeight = Screen.PrimaryScreen.Bounds.Height;
    
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
            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 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;
            }
    
            // 平台调用的申明
            [DllImport("user32.dll")]
            public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);
            [DllImport("user32.dll")]
            public static extern int ChangeDisplaySettings(ref DEVMODE devMode, int flags);
    
            // 控制改变屏幕分辨率的常量
            public const int ENUM_CURRENT_SETTINGS = -1;
            public const int CDS_UPDATEREGISTRY = 0x01;
            public const int CDS_TEST = 0x02;
            public const int DISP_CHANGE_SUCCESSFUL = 0;
            public const int DISP_CHANGE_RESTART = 1;
            public const int DISP_CHANGE_FAILED = -1;
    
            // 控制改变方向的常量定义
            public const int DMDO_DEFAULT = 0;
            public const int DMDO_90 = 1;
            public const int DMDO_180 = 2;
            public const int DMDO_270 = 3;
    
            /// <summary>
            /// 修改屏幕分辨率
            /// </summary>
            /// <param name="width">屏幕宽度</param>
            /// <param name="height">屏幕高度</param>
            public void ChangeResolution(int width, int height)
            {
                // 初始化 DEVMODE结构
                DEVMODE devmode = new DEVMODE();
                devmode.dmDeviceName = new String(new char[32]);
                devmode.dmFormName = new String(new char[32]);
                devmode.dmSize = (short)Marshal.SizeOf(devmode);
    
                if (EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref devmode) != 0)
                {
                    devmode.dmPelsWidth = width;
                    devmode.dmPelsHeight = height;
    
                    // 改变屏幕分辨率
                    int iRet = ChangeDisplaySettings(ref devmode, CDS_TEST);
    
                    if (iRet == DISP_CHANGE_FAILED)
                    {
                        MessageBox.Show("不能执行你的请求", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        iRet = ChangeDisplaySettings(ref devmode, CDS_UPDATEREGISTRY);
    
                        switch (iRet)
                        {
                            // 成功改变
                            case DISP_CHANGE_SUCCESSFUL:
                            {
                                break;
                            }
                            case DISP_CHANGE_RESTART:
                            {
                                MessageBox.Show("你需要重新启动电脑设置才能生效", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                            }
                            default:
                            {
                                MessageBox.Show("改变屏幕分辨率失败", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                            }
                        }
                    }
                }
            }
        }
    }

    2.创建窗体

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace ScreenResolution
    {
        public partial class Form1 : Form
        {
            Resolution reso;
            public Form1()
            {
                InitializeComponent();
                reso = new Resolution();
            }
    
            /// <summary>
            /// 修改分辨率
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                int width = Convert.ToInt32(this.comboBox1.SelectedItem.ToString().Split('*')[0]);
                int height = Convert.ToInt32(this.comboBox1.SelectedItem.ToString().Split('*')[1]);
                reso.ChangeResolution(width, height);
            }
    
            /// <summary>
            /// 还原分辨率
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                reso.ChangeResolution(reso.autoWidth,reso.autoHeight);
            }
        }
    }

    3.启动测试(选择一项,点击修改分辨率。亲测有效,可还原)

  • 相关阅读:
    bzoj1878: [SDOI2009]HH的项链
    bzoj1053: [HAOI2007]反素数ant
    bzoj2456: mode
    bzoj2330: [SCOI2011]糖果
    bzoj1050: [HAOI2006]旅行comf
    bzoj1047: [HAOI2007]理想的正方形
    bzoj1968: [Ahoi2005]COMMON 约数研究
    bzoj1046: [HAOI2007]上升序列
    bzoj2440: [中山市选2011]完全平方数
    bzoj1202: [HNOI2005]狡猾的商人
  • 原文地址:https://www.cnblogs.com/AlexOneBlogs/p/8400093.html
Copyright © 2011-2022 走看看