一个抓取电脑屏幕的小控件台程序

一个抓取电脑屏幕的小控件台程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;

namespace DeskRegistrar
{
    
class Program
    {
        
//声明一个API函数
        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        
private static extern bool BitBlt(
             IntPtr hdcDest, 
// 目标 DC的句柄
             int nXDest,
             
int nYDest,
             
int nWidth,
             
int nHeight,
             IntPtr hdcSrc,  
// 源DC的句柄
             int nXSrc,
             
int nYSrc,
             System.Int32 dwRop  
// 光栅的处理数值
             );

        [System.Runtime.InteropServices.DllImportAttribute(
"gdi32.dll")]
        
private static extern IntPtr CreateDC(
            
string lpszDriver,   //   驱动名称   
            string lpszDevice,   //   设备名称   
            string lpszOutput,   //   无用,可以设定位"NULL"   
            IntPtr lpInitData    //   任意的打印机数据   
            );

        
static void Main(string[] args)
        {

            System.Threading.Timer timer 
= new System.Threading.Timer(delegate(Object o)
            {
                IntPtr dc1 
= CreateDC("DISPLAY"nullnull, (IntPtr)null);
                
//创建显示器的DC   
                Graphics g1 = Graphics.FromHdc(dc1);
                
//由一个指定设备的句柄创建一个新的Graphics对象   
                Image 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, 00, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0013369376);
                
//把当前屏幕拷贝到位图中   
                g1.ReleaseHdc(dc3);
                
//释放屏幕句柄   
                g2.ReleaseHdc(dc2);
                
//释放位图句柄   
                MyImage.Save(AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss"+ ".jpg", ImageFormat.Jpeg);
                
//MessageBox.Show("已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!"); 
            }, null03000);

            Console.Read();
        }
    }
}
posted @ 2009-03-20 22:47  文明的天空  阅读(241)  评论(0编辑  收藏  举报