收录日期:2021/01/23 18:56:22 时间:2016/05/27 00:58:08 标签:C#
请问C#怎么改变屏幕分辩率?请高手帮忙!~
我自己顶一下!
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>
/// <remarks>使用 WorkingArea 可确定可由应用程序使用的屏幕的界限。
/// 工作区域是未被操作系统任务栏隐藏的屏幕部分以及其他停靠于 Windows 桌面的顶级窗口。</remarks>
public static Rectangle WorkingArea {
get { return SystemInformation.WorkingArea; }
}
}
}
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);   }  } }
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); 
  } 
 } 

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

高手帮忙讲一下多媒体技术无损压缩中傅里叶算法和哈弗曼算法的过程和编码算法! delphi 用Indy设计类似QQ的局域网聊天程序 使用Indy遇到的困惑 分不够我可以再加 事务管理器问题? MFC如何获取选择文本的区域 一个很弱的问题:SHLoadImageFile读位图出错…… 你做当午,我做锄禾。锄禾日当午! 两台机子都装有sql server2008,a做主机 ,b做备机。任何a的更改,同步或异步到b机 两台机子都装有sql server2008,a做主机 ,b做备机。任何a的更改,同步或异步到b机 EnterCriticalSection漰溃 我想把"360绿色版浏览器"的默认值改为当前目录下的index.htm,可以吗? 有谁知道在eclipse怎么设置闪屏界面 我想把"360绿色版浏览器"的默认值改为当前目录下的index.htm,可以吗? tomcat下怎么发布jsp 报表加where条件 使用继承的方法,编写最多能输入10个职工的信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。 如何知道一段C语言代码编译后的大小(字节数) 笔试过的一道逻辑题 MonthCalendar与ComboBox 宏container_of 项目中钱怎么分? 在多文档程序中新插入了一个对话框 SQL server 里截字段使用到的函数 谁给介绍下 深圳IT业 的一些情况 两台机子都装有sql server2008,a做主机 ,b做备机。任何a的更改,同步或异步到b机 求助:cygwin中使用swig,出现如下链接问题,该如何解决? 牛B上色语言 在myEclipse启动jboss4.2时遇到Source not found for DTMManagerDefault.getDTM(int)错误 关联容器元素的存放问题 问一个菜鸟问题 Datagridview问题,给个思路就行!