活用C#截取计算机屏幕

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

今天无聊翻代码,翻出来一个以前写的C#截屏的函数...拿出来和大家共享一下.
这段代码是参照网上一段截屏的C++代码改写的.只不过把API都声明了一下而已.
声明的各API也附后.以供参照.如有问题欢迎指出.
作者:AppleDotnet


///
/// 截取部分屏幕
///
/// 左上角
/// 右下角
/// 是否全屏幕
/// 返回值Bitmap
public static Bitmap GetPartScreen(Point P1,Point P2,bool Full)
{
    IntPtr hscrdc,hmemdc;
    IntPtr hbitmap,holdbitmap;
    int nx,ny,nx2,ny2;
    nx=ny=nx2=ny2=0;
    int nwidth, nheight;
    int xscrn, yscrn;
    hscrdc = CreateDC("DISPLAY", null, null, 0);//创建DC句柄
    hmemdc = CreateCompatibleDC(hscrdc);//创建一个内存DC
    xscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.HORZRES);//获取屏幕宽度
    yscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.VERTRES);//获取屏幕高度
    if(Full)//如果是截取整个屏幕
    {
        nx = 0;
        ny = 0;
        nx2 = xscrn;
        ny2 = yscrn;
    }
    else
    {
        nx = P1.X;
        ny = P1.Y;
        nx2 =P2.X;
        ny2 =P2.Y;
        //检查数值合法性
        if(nx<0)nx = 0;
        if(ny<0)ny = 0;
        if(nx2>xscrn)nx2 = xscrn;
        if(ny2>yscrn)ny2 = yscrn;
    }
    nwidth = nx2 - nx;//截取范围的宽度
    nheight = ny2 - ny;//截取范围的高度
    hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);//从内存DC复制到hbitmap句柄
    holdbitmap = SelectObject(hmemdc, hbitmap);
    BitBlt(hmemdc, 0, 0, nwidth, nheight,hscrdc, nx, ny,(UInt32)0xcc0020);
    hbitmap = SelectObject(hmemdc, holdbitmap);
    DeleteDC(hscrdc);//删除用过的对象
    DeleteDC(hmemdc);//删除用过的对象
    return Bitmap.FromHbitmap(hbitmap);//用Bitmap.FromHbitmap从hbitmap返回Bitmap
}

所用到的API声明:


[DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(
 string lpszDriver,        // driver name
 string lpszDevice,        // device name
 string lpszOutput,        // not used; should be NULL
 Int64 lpInitData  // optional printer data
 );
 
[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleDC(
 IntPtr hdc // handle to DC
 );
 
[DllImport("gdi32.dll")]
public static extern int GetDeviceCaps(
 IntPtr hdc,     // handle to DC
 GetDeviceCapsIndex nIndex   // index of capability
);

[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleBitmap(
 IntPtr hdc,        // handle to DC
 int nWidth,     // width of bitmap, in pixels
 int nHeight     // height of bitmap, in pixels
 );

[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(
 IntPtr hdc,          // handle to DC
 IntPtr hgdiobj   // handle to object
 );

[DllImport("gdi32.dll")]
public static extern int BitBlt(
 IntPtr hdcDest, // handle to destination DC
 int nXDest,  // x-coord of destination upper-left corner
 int nYDest,  // y-coord of destination upper-left corner
 int nWidth,  // width of destination rectangle
 int nHeight, // height of destination rectangle
 IntPtr hdcSrc,  // handle to source DC
 int nXSrc,   // x-coordinate of source upper-left corner
 int nYSrc,   // y-coordinate of source upper-left corner
 UInt32 dwRop  // raster operation code
 );

[DllImport("gdi32.dll")]
public static extern int DeleteDC(
 IntPtr hdc          // handle to DC
 );

 

行空局域网屏幕监控系统全面指南 本文还有配套的精品资源,点击获取 简介:本篇指南将全面介绍行空局域网屏幕监控软件的功能、操作方法和系统要求。该软件提供了实时监控员工电脑屏幕、记录键盘输入、监控应用程序和网页浏览行为等核心功能,旨在提高企业管理效率,保障信息安全。指南将详细介绍如何使用软件的屏幕快照、屏幕录像、键盘记录、程序监控、网页浏览记录、远程控制、报告与统计等功能,并强调了在使用监控软件时应注意的法律... 阅读详情

相关推荐

C#截取屏幕↑

今天无聊翻代码,翻出来一个以前写的C#截屏的函数...拿出来和大家共享一下.这段代码是参照网上一段截屏的C++代码改写的.只不过把API都声明了一下而已.声明的各API也附后.以供参照.如有问题欢迎指出.(Appledotnet@hotmail.com)  /// /// 截取部分屏幕/// ///左上角///右下角///是否全屏幕/// 返回值Bitmappublic s

醉梦流仙 专栏 3394

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西,   实现了以下简单功能    1、屏幕获取(因为是截图方式获取的,所以有点卡顿)    2、实现点击功能,并在点击的时候出现一个手势图标,方便用户观看    3、实现简单的滑动功能 ...

weixin_33688840的博客 402

c# 屏幕快照_基本的c#屏幕截图应用程序

介绍 这个应用程序以两种不同的方式捕捉屏幕: 捕捉屏幕:这是什么是说;一旦指定了结果图像的文件名,它基本上就会捕获整个屏幕。捕获区域:按住鼠标左键,用户绘制一个矩形,指定希望捕获屏幕的哪一部分。在双击时,用户选择一个文件名,绘制的矩形后面的区域将捕获到该文件。绘制之后,可以在双击保存图像之前调整矩形的大小并在屏幕上移动。 背景 这个应用程序是我自己用c#设置的练习。作为c#的新手,我想看看创建一...

weixin_39609354的博客 417

C#基于.net CF 2.0实现手机抓屏幕

我博客的第一篇文章就是.net cf 1.x实现手机屏幕的抓取,大概有190左右的访问量吧。现在是时候介绍一下.net cf 2.0下如何进行手机屏幕抓取了,.net cf 2.0中microsoft封装了ImageFormat 类,这就解决了保存图片的问题,其实在.net cf 1.x实现抓屏也就是解决一个图像保存问题!抓屏的核心技术并没有多大区别,都是Invoke windows 的GDI A

Windows Mobile 开发历险 1897

C#截取计算机屏幕

/// /// 截取部分屏幕/// /// 左上角/// 右下角/// 是否全屏幕/// 返回值Bitmappublic static Bitmap GetPartScreen(Point P1,Point P2,bool Full){    IntPtr hscrdc,hmemdc;    IntPtr hbitmap,holdbitmap;    int nx,ny,nx2,ny2;    n

xufulin的专栏 475

C#实现计算机屏幕截取

轉載自:http://www.zxbc.cn/html/20070419/2317.html今天无聊翻代码,翻出来一个以前写的C#截屏的函数...拿出来和大家共享一下.这段代码是参照网上一段截屏的C++代码改写的.只不过把API都声明了一下而已.声明的各API也附后.以供参照.如有问题欢迎指出.作者:AppleDo.Net   /// /// 截取部分屏幕/// /// 左上角///

391

C#截屏操作

/// &amp;lt;summary&amp;gt; /// 截全屏并保存成图片 /// &amp;lt;/summary&amp;gt; public void getScreen() { //Image myImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds...

奔跑的QQEE的笔记 1724

c#实现远程截取屏幕

顺序:先点监听,再点连接,再点发送,再点接收     发送端 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using Sys

liuxunixin的专栏 1139

datagridview滚动条自动滚动_snagit软件自动滚动截取长图的方法

snagit软件自动滚动截取长图的方法日常的工作中,经常碰到一些滚动窗口,如网页、聊天界面、软件的下拉列表,需要截取整个滚动窗口的内容,生成一张图片,放到文章中,或者与人共享。一般的做法,利用Windows系统自带的截图工具,或者qq、微信,滚动一次,截图一次,直到滚动到底。这样会得到若干张截图,会显得很多、很乱,图片之间可能还有重复的地方,要想合成一张,还得用其他的软件进行操作。总之比较麻烦。最...

weixin_39845306的博客 364

c#截屏木马,发送到邮箱

写在前面 技术本无罪,只是人性恶。我学习伤人技,只是为了不被人伤,而不是为了伤人。 本来是在研究外挂的,但是一不小心技能点点歪了,不过影响也不大,木马跟外挂本来就有很多共通之处。废话说完,进入正题: 我的思路如下: 1、截取屏幕,保存图片 2、装入邮件,发送 3、删除图片,毁尸灭迹 4、自启动 先来第一步:获得截屏图片(啊啊啊啊啊啊,好早就想这样不按格式来,可是他们老是说要注意格式...

m0_38046697的博客 1178

.NET 截屏实现

static void Main(string[] args){ Bitmap bit = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bit); g.CopyFromScreen(new Point(0, 0),

程序生涯 1661

Halcon 入门篇基础和 数字图像的认识

开启Halcon学习,了解halcon的基础,慢慢的走入深度学习,以及要知道什么是数字图像,为什么要对图像进行数字化处理?图像数字化包括哪三个过程?过程对数字化图像质量的影响?

2403_88923953的博客 1453

用Delphi实现远程屏幕抓取

用Delphi实现远程屏幕抓取 山东巨力股份有限公司CAD中心 檀革勤 ---- 在网络管理中,有时需要通过监视远程计算机屏幕来了解网上微机的使用情况。虽然,市面上有很多软件可以实现该功能,有些甚至可以进行远程控制,但在使用上缺乏灵活性,如无法指定远程计算机屏幕区域的大小和位置,进而无法在一屏上同时监视多个屏幕。其实,可以用Delphi自行编制一个灵活的远程屏幕抓取工具,简述如下。 ---- 一、

蝈蝈俊.net 2254

OpenLayers 项目完整分析——(二)源代码总体结构分析

转自:http://www.cnblogs.com/lzlynn/archive/2008/07/29/1255848.html 二)源代码总体结构分析 通过前面的项目介绍,我们大概已经知道Openlayers是什么,能够做什么,有什么意义。接下来我们分析它怎么样,以及怎样实现的等问题。 这个图是从它的文档上截取的,旨在从感官上认识一下OpenLayers的类。下面分别介绍(文档中的类...

weixin_30787531的博客 100

C# 操作ABDB截取手机屏幕

///         /// 截取屏幕         ///         ///         ///         public static bool ShotPic(string deviceNo)         {             var result = ProcessHelper.Run(AdbExePath, string.Format("

I39mNaoTingHai的专栏 1542

【iOS】iPhone计算器仿写

仿写了iPhone上的计算器,可以进行四则运算多项式的计算。整体设计模式为MVC模式UI布局调用了CocoPods中的Masonry库实现简易四则运算。

XY_Mckevince的博客 696

c#调用API截图

<br />要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数。虽然在.Net框架中已经提供了许多类库,这些类库的功能也十分强大,但对于一些Windows底层编程来说,还是要通过调用这些API函数才可以实现。所有API都在"Kernel"、"User "和"GDI"三个库中得以运行:其中"Kernel",他的库名为 "KERNEL32.DLL", 他主要用于产生与操作系统之间的关联,譬如:程序加载,上下文选择,文件输入输出,内存管理等等。"User "这个类库在Win32中名叫 "U

GIS骆驼的GIS博客 4956
上一篇: 如何取得IP/用户名等信息
下一篇: 自定义个性化的web复合控件
damoweisi
博客等级 码龄23年 5粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值