none
如何在程序中修改屏幕分辨率? RRS feed

  • 问题

  • using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Runtime.InteropServices;

    namespace ScreenResolution
    {

        public class Form1 : System.Windows.Forms.Form
        {
            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;
            }

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            //static extern int ChangeDisplaySettings( DEVMODE lpDevMode,  int dwFlags);

            static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
            private System.ComponentModel.Container components = null;
            public Form1()
            {
                InitializeComponent();
            }
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (components != null)
                    {
                        components.Dispose();
                    }
                }
                base.Dispose(disposing);
            }

            #region Windows Form Designer generated code
            private void InitializeComponent()
            {
                this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
                this.ClientSize = new System.Drawing.Size(292, 273);
                this.Text = "改变屏幕分辨率的例子";

            }
            #endregion

            static void Main()
            {
                Form1 r = new Form1();
                r.ChangeRes();
                Application.Run(new Form1());
            }

            void ChangeRes()
            {
                Form1 t = new Form1();
                long RetVal = 0;
                DEVMODE dm = new DEVMODE();
                dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
                dm.dmPelsWidth = 1024;
                dm.dmPelsHeight = 768;
                dm.dmDisplayFrequency = 85;
                dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
                RetVal = ChangeDisplaySettings(ref dm, 0);
            }
        }
    }

     

    这段代码,我用在了程序中,但是没有效果。请大家赐教,给出代码。


    全国最大的免费电子书下载基地http://www.52eshu.com
    2010年9月18日 4:44

答案