C#中改变显示器的分辨率

来源:互联网 发布:wps for mac破解版 编辑:程序博客网 时间:2024/05/20 10:54

下面的代码实现修改显示器分辨率和刷新频率的功能:

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);

    }

  }

原创粉丝点击