http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8059|回复: 6
打印 上一主题 下一主题

[GDI+] C# 屏幕截图 类

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-4 16:37:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Oreo 于 2014-4-4 16:53 编辑

无图无真想,我专门去载了张图


整合出来的,垃圾技术 ,大牛勿喷


[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace 屏幕截图
{

    class ImgDesk
    {
        [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 static Bitmap GetImgDesk()
        {

            //this.Hide();
            IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
            //创建显示器的DC
            Graphics g1 = Graphics.FromHdc(dc1);
            //由一个指定设备的句柄创建一个新的Graphics对象
            Bitmap 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);
            //释放位图句柄
            //pictureBox1.Image = MyImage;
            //this.Show();
            MemoryStream ms = new MemoryStream();
            MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
           return MyImage;
        }

        }
}





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
沙发
 楼主| 发表于 2014-4-4 16:43:18 | 只看该作者
如有修改,麻烦回传一份,谢谢
板凳
发表于 2014-4-4 17:22:04 | 只看该作者
我只是路过看看的。
地板
发表于 2014-6-5 10:10:04 | 只看该作者
膜拜中……
回复

使用道具 举报

5
发表于 2014-6-18 20:53:56 | 只看该作者
表示不会使用有点看不懂。。。。
6
 楼主| 发表于 2014-6-24 15:52:13 | 只看该作者
937658938 发表于 2014-6-18 20:53
表示不会使用有点看不懂。。。。

调用返回就可以了
7
发表于 2014-6-30 23:30:48 | 只看该作者
截图就不用Api了吧?
我一般用这个
[C#] 纯文本查看 复制代码
public Bitmap ScreenShot()
{
	 //截屏
    var totalWidth = Screen.PrimaryScreen.Bounds.Width;
        //.AllScreens.Select(p => p.Bounds.Width).Aggregate((a, b) => a + b);//注释的这两句可以一次性截所有屏幕
    var totalHeight = Screen.PrimaryScreen.Bounds.Height;
        //.AllScreens.Select(p => p.Bounds.Height).Aggregate((a, b) => a + b);
    var img = new Bitmap(totalWidth, totalHeight);
    var grap = Graphics.FromImage(img);
    try
    {
    	//这句就是截图的核心
        grap.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(totalWidth, totalHeight));
        grap.Dispose();
        var snap = img.GetThumbnailImage(1024, 768, () => false, IntPtr.Zero);
        using (var ms = new MemoryStream())
        {
            snap.Save(ms, ImageFormat.Jpeg);
            sysInfo.ScreenSnapshot = Convert.ToBase64String(ms.ToArray());
        }
        img.Dispose();
    }
    catch (Exception ex)
    {

        grap.FillRectangle(new SolidBrush(Color.White), 0, 0, totalWidth, totalHeight);
        var font = new Font("宋体", 16, (FontStyle.Regular));
        var brush = Brushes.Blue;
        grap.DrawString(ex.ToString(), font, brush, 2, 2);
        using (var ms = new MemoryStream())
        {
            img.Save(ms, ImageFormat.Jpeg);
            sysInfo.ScreenSnapshot = Convert.ToBase64String(ms.ToArray());
        }
       
    }
    finally
    {
        img.Dispose();
        grap.Dispose();
    }

}
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-22 07:06

© 2014-2021

快速回复 返回顶部 返回列表