怎么来实现asp.net抓屏并保存成图片

using   System   ;    
  using   System.Drawing   ;    
  using   System.Collections   ;    
  using   System.ComponentModel   ;    
  using   System.Windows.Forms   ;    
  using   System.Data   ;    
  using   System.Drawing.Imaging   ;    
  using   System.IO   ;    
      //导入在程序中使用到的名称空间    
  public   class   Capture   :   Form    
  {    
  private   System.ComponentModel.Container   components   =   null   ;    
  private   Icon   mNetTrayIcon   =   new   Icon   (   "Tray.ico"   )   ;    
  private   Bitmap   MyImage   =   null   ;    
  private   NotifyIcon   TrayIcon   ;    
  private   ContextMenu   notifyiconMnu   ;    
  public   Capture   (   )    
  {    
  //初始化窗体中使用到的组件    
  InitializeComponent   (   )   ;    
  }    
  protected   override   void   OnActivated   (   EventArgs   e   )    
  {    
  this.Hide   (   )   ;    
  }    
  [   System.Runtime.InteropServices.DllImportAttribute   (   "gdi32.dll"   )   ]    
  private   static   extern   bool   BitBlt   (    
  IntPtr   hdcDest   ,   //目标设备的句柄    
  int   nXDest   ,   //   目标对象的左上角的X坐标    
  int   nYDest   ,   //   目标对象的左上角的X坐标    
  int   nWidth   ,   //   目标对象的矩形的宽度    
  int   nHeight   ,   //   目标对象的矩形的长度    
  IntPtr   hdcSrc   ,   //   源设备的句柄    
  int   nXSrc   ,   //   源对象的左上角的X坐标    
  int   nYSrc   ,   //   源对象的左上角的X坐标    
  System.Int32   dwRop   //   光栅的操作值    
  )   ;    
  [   System.Runtime.InteropServices.DllImportAttribute   (   "gdi32.dll"   )   ]    
  private   static   extern   IntPtr   CreateDC   (    
  string   lpszDriver   ,   //   驱动名称    
  string   lpszDevice   ,   //   设备名称    
  string   lpszOutput   ,   //   无用,可以设定位"NULL"    
  IntPtr   lpInitData   //   任意的打印机数据    
  )   ;  
  public   void   capture   (   object   sender   ,   System.EventArgs   e   )    
  {    
  this.Visible   =   false   ;    
  IntPtr   dc1   =   CreateDC   (   "DISPLAY"   ,   null   ,   null   ,   (   IntPtr   )   null   )   ;    
  //创建显示器的DC    
  Graphics   g1   =   Graphics.FromHdc   (   dc1   )   ;    
  //由一个指定设备的句柄创建一个新的Graphics对象    
  MyImage   =   new   Bitmap   (   Screen.PrimaryScreen.Bounds.Width   ,   Screen.PrimaryScreen.Bounds.Height   ,   g1   )   ;    
  //根据屏幕大小创建一个与之相同大小的Bitmap对象    
  Graphics   g2   =   Graphics.FromImage   (   MyImage   )   ;    
  //获得屏幕的句柄    
  IntPtr   dc3   =   g1.GetHdc   (   )   ;    
  //获得位图的句柄    
  IntPtr   dc2   =   g2.GetHdc   (   )   ;    
  //把当前屏幕捕获到位图对象中    
  BitBlt   (   dc2   ,   0   ,   0   ,   Screen.PrimaryScreen.Bounds.Width   ,   Screen.PrimaryScreen.Bounds.Height   ,   dc3   ,   0   ,   0   ,   13369376   )   ;    
  //把当前屏幕拷贝到位图中    
  g1.ReleaseHdc   (   dc3   )   ;    
  //释放屏幕句柄    
  g2.ReleaseHdc   (   dc2   )   ;    
  //释放位图句柄    
  MyImage.Save   (   "c:\\MyJpeg.jpg"   ,   ImageFormat.Jpeg   )   ;    
  MessageBox.Show   (   "已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!"   )   ;    
  this.Visible   =   true   ;    
  }    
  public   void   ExitSelect   (   object   sender   ,   System.EventArgs   e   )    
  {    
  //隐藏托盘程序中的图标    
  TrayIcon.Visible   =   false   ;    
  //关闭系统    
  this.Close   (   )   ;    
  }    
  //清除程序中使用过的资源    
  /*public   override   void   Dispose(   )    
  {    
  base.Dispose   (   )   ;    
  if   (   components   !=   null   )    
  components.Dispose   (   )   ;    
  }   */  
  private   void   InitializeComponent   (   )    
  {    
  //设定托盘程序的各个属性    
  TrayIcon   =   new   NotifyIcon   (   )   ;    
  TrayIcon.Icon   =   mNetTrayIcon   ;    
  TrayIcon.Text   =   "用C#做Screen   Capture程序"   ;    
  TrayIcon.Visible   =   true   ;    
  //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象    
  MenuItem   [   ]   mnuItms   =   new   MenuItem   [   3   ]   ;    
  mnuItms   [   0   ]   =   new   MenuItem   (   )   ;    
  mnuItms   [   0   ]   .Text   =   "捕获当前屏幕!"   ;    
  mnuItms   [   0   ]   .Click   +=   new   System.EventHandler   (   this.capture   )   ;    
  mnuItms   [   1   ]   =   new   MenuItem   (   "-"   )   ;    
  mnuItms   [   2   ]   =   new   MenuItem   (   )   ;    
  mnuItms   [   2   ]   .Text   =   "退出系统"   ;    
  mnuItms   [   2   ]   .Click   +=   new   System.EventHandler   (   this.ExitSelect   )   ;    
  mnuItms   [   2   ]   .DefaultItem   =   true   ;    
  notifyiconMnu   =   new   ContextMenu   (   mnuItms   )   ;    
  TrayIcon.ContextMenu   =   notifyiconMnu   ;    
  //为托盘程序加入设定好的ContextMenu对象    
  this.SuspendLayout   (   )   ;    
  this.AutoScaleBaseSize   =   new   System.Drawing.Size   (   5   ,   13   )   ;    
  this.ClientSize   =   new   System.Drawing.Size   (   320   ,   56   )   ;    
  this.ControlBox   =   false   ;    
  this.MaximizeBox   =   false   ;    
  this.MinimizeBox   =   false   ;    
  this.WindowState   =   System.Windows.Forms.FormWindowState.Minimized   ;    
  this.Name   =   "capture"   ;    
  this.ShowInTaskbar   =   false   ;    
  this.Text   =   "用C#做Screen   Capture程序!"   ;    
  this.ResumeLayout   (   false   )   ;    
  }    
  static   void   Main   (   )    
  {    
  Application.Run   (   new   Capture   (   )   )   ;    
  }    
  }
posted @ 2009-12-31 14:21  708先生  阅读(418)  评论(0编辑  收藏  举报