using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;using LiBo.Win32;namespace LiBo.Hardware
{
/// <summary>
/// 显示器修改后的结果。
/// </summary>
public enum DisplaySettingsResults {
#region 实现
/// <summary>显示器设置修改成功。</summary>
Successful = User.DISP_CHANGE_SUCCESSFUL,
/// <summary>传入了一个无效的标记集。</summary>
BadFlags = User.DISP_CHANGE_BADFLAGS,
/// <summary>图形模式不支持。</summary>
BadMode = User.DISP_CHANGE_BADMODE,
/// <summary>传入了无效的参数。</summary>
BadParam = User.DISP_CHANGE_BADPARAM,
/// <summary>显示器设置修改失败。</summary>
Failed = User.DISP_CHANGE_FAILED,
/// <summary>无法将设置写入注册表。</summary>
NotUpdated = User.DISP_CHANGE_NOTUPDATED,
/// <summary>需要重新启动计算机才能使新的设置生效。</summary>
Restart = User.DISP_CHANGE_RESTART
#endregion
}
/// <summary>
/// Monitor 类用于显示器相关的操作。
/// </summary>
public class Monitor {
/// <summary>
/// 设置显示器的分辨率
/// </summary>
/// <param name="width">新的分辨率的宽度</param>
/// <param name="height">新的分辨率的高度</param>
/// <returns>显示器修改后的结果。</returns>
public static DisplaySettingsResults ChangeSize(int width, int height) {
#region 实现
DEVMODE dm = new DEVMODE();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm); if (0 != User.EnumDisplaySettings(null, User.ENUM_CURRENT_SETTINGS, ref dm)) {
dm.dmPelsWidth = width;
dm.dmPelsHeight = height; int flag = User.ChangeDisplaySettings(ref dm, User.CDS_TEST); if (flag == User.DISP_CHANGE_FAILED) {
return DisplaySettingsResults.Failed;
} else {
flag = User.ChangeDisplaySettings(ref dm, User.CDS_UPDATEREGISTRY); switch (flag) {
case User.DISP_CHANGE_SUCCESSFUL:
return DisplaySettingsResults.Successful;
case User.DISP_CHANGE_BADFLAGS:
return DisplaySettingsResults.BadFlags;
case User.DISP_CHANGE_BADMODE:
return DisplaySettingsResults.BadMode;
case User.DISP_CHANGE_BADPARAM:
return DisplaySettingsResults.BadParam;
/*case User.DISP_CHANGE_FAILED:
return DisplaySettingsResults.Failed;*/
case User.DISP_CHANGE_NOTUPDATED:
return DisplaySettingsResults.NotUpdated;
case User.DISP_CHANGE_RESTART:
return DisplaySettingsResults.Restart;
}
}
}
return DisplaySettingsResults.Failed;
#endregion
} /// <summary>
/// 获取桌面上显示监视器的数目。
/// </summary>
public static int Count {
get { return SystemInformation.MonitorCount; }
} /// <summary>
/// 获取一个值,该值指示是否所有显示监视器都具有相同的颜色格式。
/// </summary>
public static bool SameDisplayFormat {
get { return SystemInformation.MonitorsSameDisplayFormat; }
} /// <summary>
/// 获取主显示监视器的尺寸(以像素为单位)。
/// </summary>
public static Size PrimaryMonitorSize {
get { return SystemInformation.PrimaryMonitorSize; }
} /// <summary>
/// 获取工作区域的大小(以像素为单位)。
/// </summary>
/// <res>使用 WorkingArea 可确定可由应用程序使用的屏幕的界限。
/// 工作区域是未被操作系统任务栏隐藏的屏幕部分以及其他停靠于 Windows 桌面的顶级窗口。</res>
public static Rectangle WorkingArea {
get { return SystemInformation.WorkingArea; }
}
}
}

解决方案 »

  1.   

    using System; using System.Drawing; 
    using System.Collections; using System.ComponentModel; 
    usingSystem.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);   }  } }
      

  2.   

    C#中实现改变显示器的分辨率(原码)
     作者:
     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); 
      } 
     } 

      

  3.   

    第一个不行,因为声明API函数的语句不在里面,用后面那个吧:)