用C#实现全屏幕截图

C#实现屏幕截图木马 本文用C#进行简单的屏幕截图木马编程,适合新手学习网络通信,线程如何阻塞,如何屏幕截图,如何隐藏程序,如何让程序开机自启动等等!精彩不要错过~ 阅读详情

今天一位同事想写一个全屏幕截图的代码。当然要实现的第一步是能够获取整个屏幕的位图,记得Win32 API的CreateDC, BitBlt等函数可以使用。于是上网查了下,果然屏幕截图用这些函数。但winform已经可以把API都忘记了,所以得寻找一个无Win32 API的实现方式。综合了网上的实现,以及自己的一些设计,实现思路如下:1. 开始截图时,创建一个与屏幕大小一样的位图,然后用Graphics.CopyFromScreen()把屏幕位图拷贝到该位图上。这是很关键的一步,这 样所有的操作就都可以在该位图上进行了,而无实际屏幕无关了。

int width = Screen.PrimaryScreen.Bounds.Width;

int height = Screen.PrimaryScreen.Bounds.Height;

Bitmap bmp = new Bitmap(width, height);

using (Graphics g = Graphics.FromImage(bmp)) {

g.CopyFromScreen(0, 0, 0, 0, new Size(width, height));

}

2. 接下来为了方便在这之上进行截图,有一个很重要的设计实现方式:用全屏幕窗体代替现有真实屏幕,这样就可以把截图过程的所有操作都在那个窗体上实现(该窗 体设置成无边框,高宽等于屏幕大小即可),另外为了显示掩蔽效果(只能正常显示选择的部分屏幕内容,而其实部分用一个如半透明层覆盖),就添加一层半透明 位置位图。具体代码如下:

public partial class FullScreenForm : Form {

private Rectangle rectSelected = Rectangle.Empty;

private bool isClipping = false;

private Bitmap screen;

private Bitmap coverLayer = null;

private Color coverColor;

private Brush rectBrush = null;

private Bitmap resultBmp = null;

public FullScreenForm(Bitmap screen) {

InitializeComponent();

int width = Screen.PrimaryScreen.Bounds.Width;

int height = Screen.PrimaryScreen.Bounds.Height;

coverLayer = new Bitmap(width, height);

coverColor = Color.FromArgb(50, 200, 0, 0);

rectBrush = new SolidBrush(coverColor);

using (Graphics g = Graphics.FromImage(coverLayer)) {

g.Clear(coverColor);

}

this.Bounds = new Rectangle(0, 0, width, height);

this.screen = screen;

this.DoubleBuffered = true;

}

protected override void OnMouseDown(MouseEventArgs e) {

if (e.Button == MouseButtons.Left) {

isClipping = true;

rectSelected.Location = e.Location;

}

else if (e.Button == MouseButtons.Right) {

this.DialogResult = DialogResult.OK;

}

}

protected override void OnMouseMove(MouseEventArgs e) {

if (e.Button == MouseButtons.Left && isClipping) {

rectSelected.Width = e.X - rectSelected.X;

rectSelected.Height = e.Y - rectSelected.Y;

this.Invalidate();

}

}

protected override void OnMouseUp(MouseEventArgs e) {

if (e.Button == MouseButtons.Left && isClipping) {

rectSelected.Width = e.X - rectSelected.X;

rectSelected.Height = e.Y - rectSelected.Y;

this.Invalidate();

resultBmp = new Bitmap(rectSelected.Width, rectSelected.Height);

using (Graphics g = Graphics.FromImage(resultBmp)) {

g.DrawImage(screen,new Rectangle(0, 0, rectSelected.Width, rectSelected.Height), rectSelected, GraphicsUnit.Pixel);

}

this.DialogResult = DialogResult.OK;

}

}

protected override void OnPaint(PaintEventArgs e) {

Graphics g = e.Graphics;

g.DrawImage(screen, 0, 0);

g.DrawImage(coverLayer, 0, 0);

PaintRectangle();

}

protected override void OnPaintBackground(PaintEventArgs e) {

}

protected override void OnKeyDown(KeyEventArgs e) {

if (e.KeyCode == Keys.Escape) {

this.DialogResult = DialogResult.Cancel;

}

}

private void PaintRectangle() {

using (Graphics g = Graphics.FromImage(coverLayer)) {

g.Clear(coverColor);

GraphicsPath path = new GraphicsPath();

path.AddRectangle(this.Bounds);

path.AddRectangle(rectSelected);

g.FillPath(rectBrush, path);

g.DrawRectangle(Pens.Blue, rectSelected);

}

}

public Bitmap ResultBitmap {

get { return resultBmp; }

}

}

上面的代码都很容易看明白,这里有一个技巧就是GraphicsPath,它自动会形成一个中空的区域。上面的实现很容易扩展:多区域截图,多裁判截图等都很容易实现。

C#实现屏幕截图 背景 在很多聊天工具中都有一个屏幕截图功能,可以方便的截取屏幕部分区域,以图片的形式传输给对方,使得沟通更加直观。其实不仅在聊天时需要截图,在其他时候我们也需要截图工具,但一般我们都使采用Print Screen按键来截取整个屏幕,然后使用MSPaint再选取部分区域。其实使用C#也很容易实现截图功能。 原理 首先我们也需要对整个屏幕拍一个快照,然后在这个图片上选择一个区域,再截取这部分区域... 阅读详情

相关推荐

C# 实现屏幕截图

//创建用户控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using

liguo9860的专栏 4356

Winform截图

本文使用WinForm演示C#截图功能

JiaHaiMemory的博客 2799

【拥抱开源】十年之做C#屏幕截图工具全面开源

最初的项目名称是屏幕截图2005,因为这一年是2005年,也因为它是使用VS2005创建的。这十年来一直在使用和完善中,只是个人的精力有限,想做的东西太多,还没有把它做的特别的完善。之前写过 C#软件开发实例.私人订制自己的屏幕截图工具 系列文章,也附带了源码下载,是对部分功能实现改进后的实现,但实现的功能不如最初的版本完善。现在把这两个版本都开源出来,方便需要的小伙伴下载使用学习,同时也希望大家

无知人生,记录点滴 8691

C#全屏截图并保存

​ 如果截出来的图像大小和屏幕分辨率不符合,去掉注释部分的代码即可。

m0_51860986的博客 784

C#系统桌面截图功能实现(三)

本文描述了如何使用C# 实现WinForms桌面截图程序。该程序实现了截图模式:全屏截图、工作区截图和区域选择截图,并包含简单的图片保存功能。核心内容包括:屏幕区域选择、DPI感知处理、实时尺寸显示、图片保存等。

weixin_43626218的博客 1455

C# Winform实现屏幕截图应用实战教程

Winform技术是用于构建Windows桌面应用程序的一种成熟方法,其核心优势在于创建具有高度交互性的用户界面。它允许开发者使用丰富的控件和事件驱动模型来快速构建响应用户操作的应用程序。随着技术的发展,Winform已经不再像过去那样占据主流地位,但它依然有着自己的独特优势。相较于Web应用程序,Winform应用程序无需浏览器环境即可运行,并能提供更丰富的桌面交互体验。在本章中,我们将探究Winform的应用场景、其开发过程中的关键特点以及如何利用Winform技术实现桌面软件的快速开发。

weixin_33628677的博客 915

C#截图操作屏幕不完整/多屏幕共同截图解决

C#截图操作屏幕不完整/多屏幕共同截图解决 C#由于缩放问题导致截图不能正常工作 windows界面缩放导致bug C#多屏幕截图 Bitmap、GetDeviceCaps、Graphic

weixin_45713062的博客 4361

C#实现屏幕截图功能与剪切板集成指南

屏幕截图的基本原理是通过编程获取屏幕上每个像素的颜色信息,然后将这些颜色信息按顺序排列保存成图像文件格式。实际上,大多数操作系统都提供了API来实现这一功能。在Windows系统中,GDI+库就提供了这样的功能。剪切板支持基本的剪切、复制和粘贴操作,这些操作可以用于文本、图像和其他数据类型。在图形用户界面中,复制和粘贴功能极大地提高了用户操作的效率,无需重新输入即可快速分享信息。它之所以重要,是因为它提供了一个统一的数据交换机制,使得各种类型的数据可以在不同的软件应用程序之间流动。

weixin_35370061的博客 985

c# 屏幕快照_用C#实现全屏幕截图实现

publicpartialclassFullScreenForm:Form{privateRectanglerectSelected=Rectangle.Empty;privateboolisClipping=false;privateBitmapscreen;privateBitmapcoverLayer=null;privateColorcoverColor;privateBru...

weixin_39872624的博客 461

C#实现带鼠标指针的屏幕截图功能

此代码在截图上绘制一个半透明黄色虚线矩形,可用于标记特定区域。Pen 关键属性:属性功能Color设置笔触颜色(支持Alpha)Width线条粗细DashStyle虚线样式(Solid、Dash、Dot等)LineJoin折角连接方式(Miter、Round等)类似地,Brush可用于填充区域:实现渐变遮罩效果。除了位置,还需确定当前显示的是哪种光标。属性返回当前活动的Cursor实例,可能是系统内置光标(如。

weixin_42311427的博客 1129

C#实现OCR识别与屏幕截图功能实战项目

OCR(Optical Character Recognition)通过图像处理与模式识别技术,将扫描文档或屏幕截图中的文字转换为可编辑文本。其核心流程包括图像预处理、字符分割、特征提取与分类识别。在C#开发中,依托.NET Framework/.NET Core强大的GDI+图形处理能力和丰富的异步编程支持,结合P/Invoke调用底层API进行高效图像捕获,使得本地OCR系统具备高集成度与可控性。

weixin_42124497的博客 1686

整理的C#屏幕截图,控件截图程序

[size=large]代码基本从网上搜集而来,整理成以下文件:[/size] [color=blue]包括屏幕截图(和屏幕上看到的一致); 以及控件截图(只要该控件在本窗口内显示完全且不被其他控件遮挡就可正确截图)[/color] [code="C#"] using System; using System.Collections.Generic; using System....

LC 695

C#实现屏幕截图功能的详细代码与实践

在讨论C#屏幕截图技术之前,首先要了解命名空间。它提供了对GDI+基本图形功能的访问,其中包含了各种用于创建、管理和操作图形图像的类。这些类为图像处理提供了强大而灵活的支持,尤其是在进行屏幕截图操作时,这一命名空间中的许多类都扮演着至关重要的角色。在C#中,Bitmap类是一个非常重要的图像处理组件,它位于命名空间下。Bitmap类提供了一系列操作位图图像的方法,包括创建、保存、加载和显示图像。位图图像是一种常见的图像文件格式,其文件扩展名为.bmp,同时也支持其他格式如。

weixin_35920379的博客 538

c#获取屏幕截图

全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#获取屏幕上某坐标点的颜色using System.Runtime.InteropServices;private struct POINT { private int x; private int y; }static POINT point;[DllImport("user32", ExactSpelling = t

8297

微信中调起支付宝支付

微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...

han_calligrapher的博客 2万+

Codex登录要手机验证码?Cockpit Tools跳过验证保姆级教程

摘要:OpenAI升级风控后,Codex登录需手机验证,增加批量账号使用成本。CockpitTools(GitHub 8.3k star)可绕过验证,支持多AI编程平台账号管理。操作步骤:1) 获取ChatGPT网页Session数据;2) 通过转换工具生成CPA格式JSON;3) 导入工具启动Codex。注意:仅适用于未绑定手机号的账号,Session会过期,且需防范数据泄露风险。商业账号通常直接提供认证文件。(150字)

5842

c#实现屏幕截图

Graphics 类的CopyFromScreen方法可以拿到整个屏幕的截图,屏幕截图的实现主要就是用到了他 思路是首先将整个屏幕的图像截取下来,然后作为一个窗体的背景显示给用户,由用户选择要截取的区域 后,保存图片就可以了 Code publicpartialclassForm2:Form { privatebooldown=...

awmxmif55601270的博客 250

Basilisk vs. STK:开源航天仿真工具在Windows上的实战体验与生态对比

本文对比了开源航天仿真工具Basilisk与商业软件STK在Windows平台上的实战体验与生态差异。从技术架构、安装配置、使用成本、功能覆盖、社区生态到适用场景,全面分析了二者的优劣势,为航天工程师和研究人员提供选型参考。Basilisk在性能和扩展性上表现突出,而STK在可视化与专业模块上更具优势。

weixin_30632089的博客 588

C#实现类似qq的屏幕截图程序 转

C#实现类似qq的屏幕截图程序 因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单,用到的技术也不多,只能实现类似qq的截图功能(方法虽然很笨)程序流程如下:1.截取整个屏幕并保存2.新开一个全屏窗口,将保存的屏幕作为背景3.鼠标拖动改变截取范围,右键取消4.双击截取,保存在粘贴板,全屏窗口关闭好了,下面的是代码部分首先新建一

十年一剑 1858

Labview 机器视觉(4)之 图像处理进阶 - 动态ROI与批量保存

本文深入探讨了LabVIEW机器视觉中动态ROI与批量保存两大进阶技术。动态ROI通过模式匹配或粒子分析实现检测区域的自动追踪,解决了产品位置变化带来的挑战。同时,文章详细介绍了如何设计高效的文件命名规则与异步保存机制,以实现海量图像数据的批量保存与管理,从而构建稳定、高效的工业自动化检测系统。

weixin_29234423的博客 219

基于RK3562J开发板的MCP2518FD CAN-FD控制器驱动适配与测试指南

本文详细介绍了在RK3562J开发板上适配MCP2518FD CAN-FD控制器驱动的完整流程。内容涵盖内核驱动配置、设备树修改、编译烧录以及实际通信测试,重点分享了调试方法,旨在帮助开发者快速为嵌入式系统扩展高速CAN-FD通信能力,适用于汽车电子、工业控制等场景。

jenkins8butler的博客 495
上一篇: C#中控件的缩写大全
下一篇: 用C#获取CPU编号、硬盘编号等与系统有关的环境属性
OnLineStudy
博客等级 码龄16年 12粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值