C#中改变显示器的分辨率   
    
  作者:   net_lover   发表时间:   2003-8-7   18:05:43     
    
  --------------------------------------------------------------------------------   
    
  下面的代码实现修改显示器分辨率和刷新频率的功能:   
    
  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);   
          }   
      }   
  }