C#利用Windows自带gdi32.dll实现抓取屏幕功能实例

本文实例讲述了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#程序设计有所帮助。

(0)

相关推荐

  • 基于C#实现的屏幕指定区域截屏代码

    以前在别的地方见过一个通过调用系统API实现屏幕截图的例子,从内心来说我不太喜欢在C#代码中出现这种情况,现在什么都讲"和谐",我觉得这种做法就是破坏了我们的"和谐"代码,呵呵,开玩笑,有的时候,不通过系统API确实难以做到的. 下面讲述的就是怎么通过纯C#来实现屏幕截图,代码如下: 复制代码 代码如下: //截取全屏图象        private void btnFullScreen_Click(object sender, EventArgs e)     

  • C#抓取当前屏幕并保存为图片的方法

    本文实例讲述了C#抓取当前屏幕并保存为图片的方法.分享给大家供大家参考.具体分析如下: 这是一个C#实现的屏幕抓取程序,可以抓取整个屏幕保存为指定格式的图片,并且保存当前控制台缓存到文本 using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; u

  • c#实现winform屏幕截图并保存的示例

    复制代码 代码如下: using System.Runtime.InteropServices;using System.Drawing.Imaging;    [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]    private static extern bool BitBlt( IntPtr hdcDest,   //   目标   DC的句柄                       int n

  • 使用C#实现在屏幕上画图效果的代码实例

    以下这段C#代码实现的功能是在屏幕上画图的效果!具体代码如下: 复制代码 代码如下: //DllImport所在的名字空间 using System.Runtime.InteropServices;[DllImport("User32.dll")]public extern static System.IntPtr GetDC(System.IntPtr hWnd);  private void button19_Click(object sender, EventArgs e){  

  • 解决C#全屏幕截图的实现方法

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

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

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

  • C#利用Windows自带gdi32.dll实现抓取屏幕功能实例

    本文实例讲述了C#利用Windows自带gdi32.dll实现抓取屏幕功能,是C#应用程序设计中一个非常实用的功能,现分享给大家供大家参考借鉴. 具体功能代码如下: internal static void GetScreenShot( ) { //获得当前屏幕的大小 Rectangle rect = new Rectangle(); rect = Screen.AllScreens[0].WorkingArea; //计算图片的大小,因为图片的长和宽有可能超过目前屏幕的大小 //创建一个以当前

  • 利用微软com组件mstscax.dll实现window7远程桌面功能

    复制代码 代码如下: namespace Client{    public partial class Login : Form    {        private string ip = null; public Login()        {            InitializeComponent();        } public Login(string IP)        {            InitializeComponent();            i

  • 用windows自带的ftp.exe实现断点续传的方法

    动画下载地址: http://www.chinesehack.org/soft/book/goonftp-jc.rar 建议使用全屏观看 ftp断点续传(黑客进阶) hotmail出了一个题目 如果不使用 wget cuteftp 等ftp工具 仅仅利用Windows自带的ftp.exe 可不可以实现断点续传 讨论了大概5,6页帖子 大家都得出结论是不可以 偶问了babybat 她认为unix可以 但是Windows下 不利用编程是做不到的 但是偶还是不甘心滴 于是 我分析了cuteftp 的指

  • C#实现利用Windows API读写INI文件的方法

    本文实例讲述了C#实现利用Windows API读写INI文件的方法.分享给大家供大家参考.具体如下: 写入时,如果没有INI文件,自动创建INI 如果在创建时,GetLastError:5 检查IniPath是否添加了文件名称.ini using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Runtime.InteropServices; namespace

  • 利用win10自带虚拟机hyper-v安装centos7方法详解

    一.安装win10企业版自带虚拟机 hyper-v 1.控制面板-->程序和功能-->启用或关闭Windows功能 勾上 hyper-v 确定就ok了 2.安装成功后会发现在 左下角"开始"菜单里的"Windows 管理工具" 中出现"hyper-v管理器" 打开hyper-v管理器,首先新建"虚拟交换机" 以便虚拟系统访问网络. 虚拟交换机 创建完成后,接下来我们创建 虚拟机. 这边根据需要选择第一代还是第二代.

  • windows上利用charles抓取微信小程序数据包,手机APP数据包(HTTP与HTTPS数据包)

    1.下载charles包.安装 Charles Proxy抓包工具 v4.1 破解文件 win64 附破解方法 2.关闭电脑防火墙 打开控制面板,选择Windows防火墙,关了(不关很可能没法抓包,在这栽过坑) 2.连接手机 2.1 用数据线把手机连上电脑 2.2 查电脑ip,命令行输入 ipconfig 2.3 修改手机网络代理 手机网络改为代理,ip为电脑ip,端口8888(charles默认端口,若被其他程序占用可修改,原则是保持电脑和手机一致) 3.安装SSL证书 (大多数app或小程序

  • 利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例

    前言 最近的一个项目中需要在图片上添加文字,使用了OpenCV,结果发现利用opencv给图像添加文字有局限.可利用的字体类型比较少,需要安装Freetype扩展,比较复杂.而且不能用putText函数输出中文,否则就会出现乱码的情况.只好选择使用Python PIL函数库对照片进行处理,利用Python自带的PIL库扩展图片大小给图片加上文字描述,大多都是库函数调用,只是给定图片宽度后计算文字所需行数的代码需要写. 代码比较丑,but it works. 代码示例 #!/usr/bin/env

  • C#利用微软自带库进行中文繁体和简体之间转换的方法

    本文实例讲述了C#利用微软自带库进行中文繁体和简体之间转换的方法.分享给大家供大家参考.具体分析如下: 下面的代码是一个简单的转换范例,真正的核心转换语句只有一句话,其它的都是界面和数据相关的,使用前需要引用Microsoft.VisualBasic这个类库 /// <summary> /// 转繁体 /// </summary> /// <param name="sender"></param> /// <param name=&

  • 通过windows自带的系统监视器来查看IIS并发连接数(perfmon.msc)

    如果要查看IIS连接数,最简单方便的方法是通过"网站统计"来查看,"网站统计"的当前在线人数可以认为是当前IIS连接数.然而,"网站统计"的当前在线人数统计时间较长,一般为10分钟或15分钟,再加上统计技术及统计机制的问题,从而会产生或多或少的统计误差. 如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看.这正是本文要介绍的方法. 一.运行-->输入"perfmon.msc"

  • 利用discuz自带通行证整合dedecms的方法以及文件下载

    整合discuz的通行证:利用discuz自带通行证整合dede的方法以及文件下载 首先感谢柏拉图提供这么好的免费程序在论坛上看到大家很多都想整合discuz.我想柏拉图肯定会弄一个非常完善的dede的通行证.在没有出来之前我们就用discuz自带的通行证吧.个人看了一下还是非常不错的.一:前提准备以及版本:dede版本:3.1 lit版,3.1正式版上测试都通过discuz版本.用的是最新的5.0版本二:主要涉及几个文件1:dede:(1)include/config_passport.php

随机推荐