C#利用Windows自带gdi32.dll实现抓取屏幕功能实例
作者:shichen2014 发布时间:2023-04-10 00:37:18
标签:C#,抓取,屏幕,功能
本文实例讲述了C#利用Windows自带gdi32.dll实现抓取屏幕功能,是C#应用程序设计中一个非常实用的功能,现分享给大家供大家参考借鉴。
具体功能代码如下:
internal static void GetScreenShot( )
{
//获得当前屏幕的大小
Rectangle rect = new Rectangle();
rect = Screen.AllScreens[0].WorkingArea;
//计算图片的大小,因为图片的长和宽有可能超过目前屏幕的大小
//创建一个以当前屏幕为模板的图象
Control ctl = new Control();
Graphics g1 = ctl.CreateGraphics();
//创建以屏幕大小为标准的位图
Image MyImage = new Bitmap(rect.Width ,rect .Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
//Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
//return MyImage.GetThumbnailImage(control.Width, control.Height, myCallback, IntPtr.Zero);
MyImage.Save("D:\\aa.jpg");
}
[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 //光栅的操作值
);
希望本文C#抓取屏幕实例对大家的C#程序设计有所帮助。


猜你喜欢
- 返回集合为null还是空集合及空集合的三种写法个人认为在自己写接口时,需要返回集合时返回一个空集合,比如mybatis查询如果返回一个集合,
- 今天学习了Mybatis执行存储,感觉不是那么好用,可能是我没用习惯。我先在SQLSERVER创建存储alter procedure usp
- 关于注入数据说明1.不通过配置文件注入数据通过@Value将外部的值动态注入到Bean中,使用的情况有:注入普通字符串注入操作系统属性注入表
- Flutter底部和顶部导航栏的实现,供大家参考,具体内容如下带文字图标的底部导航栏(使用BottomNavigationBar和Botto
- 本文实例为大家分享了android recyclerview模拟聊天界面的具体代码,供大家参考,具体内容如下效果图:实现代码:package
- 本文实例为大家分享了Unity Shader序列帧动画效果的具体代码,供大家参考,具体内容如下 实现原理主要的思想是设置显示UV
- 在android开发中,一说起线程的使用,很多人马上想到new Thread(){...}.start()这种方式。这样使用当然可以,但是多
- 思路:1.安装插件:安装log4net2.使用配置:添加log4net.config配置文件3.输出日志文件格式:添加日志配置4.Assem
- 前言前面一篇文章分析了 InputReader 对按键事件的流程流程,大致上就是根据配置文件把按键的扫描码(scan code)转换为按键码
- 仅做学习交流,如有侵犯联系必删。前言一篇酷狗app安卓逆向的文章,难度适中。样本: 酷狗app v10.8.8工具: jadx、Pixel3
- 在构建RESTful数据服务过程中,我们定义了controller、repositories,并用一些注解修饰它们,但是到现在为止我们还没执
- 升级年初了,我们打算升级下apg,这样之后就拥抱下jetpack compose了!!想用comopse有两个必选项agp7.0和kotli
- eclipse导入appcompat项目报错解决办法我们在eclipse导入开源项目后,经常会发现找不到类似Theme.AppCompat.
- java StringBuilder类的详解及简单实例实现代码:public class StringBuilder
- 工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生
- 最近学了很多的知识,脑容量小,记不清,还是得做做练习!今天就做了一个扑克牌的练习首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必
- 在做项目中经常会遇到有项目需求是需要判断字符为中文的一些问题,所以搜集了判断中文字符的代码片段,特此分享供大家参考。直接贴出代码了,里面有详
- 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性
- 不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,
- 前言最近接了一个项目,甲方不愿意买服务器,但是呢,项目又必须要用文件功能。所以很巧,最近又刚好看到了Minio这个牛逼的工具。正好借此机会记