现在的位置: 首页 > 综合 > 正文

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

2013年09月14日 ⁄ 综合 ⁄ 共 2407字 ⁄ 字号 评论关闭
C#中改变显示器的分辨率
作者: 孟宪会 出自: 【孟宪会之精彩世界】 发布日期: 2003-7-24 17:35:01


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

using System;<br /> using System.Drawing;<br /> using System.Collections;<br /> using System.ComponentModel;<br /> using System.Windows.Forms;<br /> using System.Data;<br /> using System.Runtime.InteropServices;</p> <p>namespace ScreenResolution<br /> {</p> <p> public class Form1 : System.Windows.Forms.Form<br /> {<br /> public enum DMDO<br /> {<br /> DEFAULT = 0,<br /> D90 = 1,<br /> D180 = 2,<br /> D270 = 3<br /> }</p> <p> [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]<br /> struct DEVMODE<br /> {<br /> public const int DM_DISPLAYFREQUENCY = 0x400000;<br /> public const int DM_PELSWIDTH = 0x80000;<br /> public const int DM_PELSHEIGHT = 0x100000;<br /> private const int CCHDEVICENAME = 32;<br /> private const int CCHFORMNAME = 32;</p> <p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHDEVICENAME)]<br /> public string dmDeviceName;<br /> public short dmSpecVersion;<br /> public short dmDriverVersion;<br /> public short dmSize;<br /> public short dmDriverExtra;<br /> public int dmFields;</p> <p> public int dmPositionX;<br /> public int dmPositionY;<br /> public DMDO dmDisplayOrientation;<br /> public int dmDisplayFixedOutput;</p> <p> public short dmColor;<br /> public short dmDuplex;<br /> public short dmYResolution;<br /> public short dmTTOption;<br /> public short dmCollate;<br /> [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHFORMNAME)]<br /> public string dmFormName;<br /> public short dmLogPixels;<br /> public int dmBitsPerPel;<br /> public int dmPelsWidth;<br /> public int dmPelsHeight;<br /> public int dmDisplayFlags;<br /> public int dmDisplayFrequency;<br /> public int dmICMMethod;<br /> public int dmICMIntent;<br /> public int dmMediaType;<br /> public int dmDitherType;<br /> public int dmReserved1;<br /> public int dmReserved2;<br /> public int dmPanningWidth;<br /> public int dmPanningHeight;<br /> }</p> <p> [DllImport("user32.dll", CharSet=CharSet.Auto)]<br /> //static extern int ChangeDisplaySettings( DEVMODE lpDevMode, int dwFlags);</p> <p> static extern int ChangeDisplaySettings( [In] ref DEVMODE lpDevMode, int dwFlags);<br /> private System.ComponentModel.Container components = null;<br /> public Form1()<br /> {<br /> InitializeComponent();<br /> }<br /> protected override void Dispose( bool disposing )<br /> {<br /> if( disposing )<br /> {<br /> if (components != null)<br /> {<br /> components.Dispose();<br /> }<br /> }<br /> base.Dispose( disposing );<br /> }</p> <p> #region Windows Form Designer generated code<br /> private void InitializeComponent()<br /> {<br /> this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);<br /> this.ClientSize = new System.Drawing.Size(292, 273);<br /> this.Text = "改变屏幕分辨率的例子";</p> <p> }<br /> #endregion</p> <p> static void Main()<br /> {<br /> Form1 r = new Form1();<br /> r.ChangeRes();<br /> Application.Run(new Form1());<br /> }</p> <p> void ChangeRes()<br /> {<br /> Form1 t = new Form1();<br /> long RetVal=0;<br /> DEVMODE dm = new DEVMODE();<br /> dm.dmSize= (short)Marshal.SizeOf(typeof(DEVMODE));<br /> dm.dmPelsWidth = 1024;<br /> dm.dmPelsHeight= 768;<br /> dm.dmDisplayFrequency=85;<br /> dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;<br /> RetVal = ChangeDisplaySettings(ref dm, 0);<br /> }<br /> }<br /> }<br />

抱歉!评论已关闭.