静观其变

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

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(614);
      
this.ClientSize = new System.Drawing.Size(292273);
      
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);
    }

  }

}
posted on 2005-08-07 23:09  wangyue  阅读(2319)  评论(0编辑  收藏  举报