按“print”键 后复制在画图工具里,保存为jpg格式。

解决方案 »

  1.   

    参考这个例子:Capturing the Screen Image Using C#
    http://www.csharphelp.com/archives2/archive393.html
    不过楼上说的办法似乎也可以。:)
    你用SendKeys.Send,发一个"print"键出来,然后抓住输出的图象。不过我也没有看到如何抓的输出的图象,你先用上面的方法,我去试验一下,不知道是否可行。
      

  2.   

    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 ( "common.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 ) ; string myFileName = Path.Combine(Application.StartupPath,"myScreen.jpg");
    //释放位图句柄
    MyImage.Save (  myFileName, ImageFormat.Jpeg ) ;
    MessageBox.Show ( "已经把当前屏幕保存到 " + myFileName + "!" ) ;
    this.Visible = true ;
    }
    public void ExitSelect ( object sender , System.EventArgs e ) {
    //隐藏托盘程序中的图标
    TrayIcon.Visible = false ;
    //关闭系统
    this.Close ( ) ;
    }
    //清除程序中使用过的资源
    protected override void Dispose( bool disposing ) {
    if( disposing ) {
    if (components != null) {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }
    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 ( ) ) ;
    }
    }
      

  3.   

    注意找个common.ico 放在编译后的同级目录,或者直接将它改成你要的图标