C#调用Windows API函数截图
界面如下:

下面放了一个PictureBox
首先是声明函数:
//这里是调用 Windows API函数来进行截图
//首先导入库文件
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] //声明函数
private static extern IntPtr CreateDC
(
string Driver, //驱动名称
string Device, //设备名称
string Output, //无用,可以设定为null
IntPtr PrintData //任意的打印机数据
); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, //目标设备的句柄
int XDest, //目标对象的左上角X坐标
int YDest, //目标对象的左上角的Y坐标
int Width, //目标对象的宽度
int Height, //目标对象的高度
IntPtr hdcScr, //源设备的句柄
int XScr, //源设备的左上角X坐标
int YScr, //源设备的左上角Y坐标
Int32 drRop //光栅的操作值 );
截图按钮事件代码:
private void button1_Click(object sender, EventArgs e)
{
//创建显示器的DC
IntPtr dcScreen = CreateDC("DISPLAY", null, null, (IntPtr)null); //由一个指定设备的句柄创建一个新的Graphics对象
Graphics g1 = Graphics.FromHdc(dcScreen);
int tmpWidth, tmpHeigth; //获得保存图片的质量
long level = long.Parse(this.textBox5.Text); //如果是全屏捕获
if(this.radioButton1.Checked == true)
{
tmpWidth = Screen.PrimaryScreen.Bounds.Width;
tmpHeigth = Screen.PrimaryScreen.Bounds.Height;
Image MyImage = new Bitmap(tmpWidth, tmpHeigth, g1); //创建位图图形对象
Graphics g2 = Graphics.FromImage(MyImage);
//获得窗体的上下文设备
IntPtr dc1 = g1.GetHdc();
//获得位图文件的上下文设备
IntPtr dc2 = g2.GetHdc(); //写入到位图
BitBlt(dc2, , , tmpWidth, tmpHeigth, dc1, , , ); //释放窗体的上下文设备
g1.ReleaseHdc(dc1);
//释放位图的上下文设备
g2.ReleaseHdc(dc2); //保存图像并显示
SaveImageWithQuality(MyImage,level);
this.pictureBox1.Image = MyImage; }
else
{
int X = Convert.ToInt32(this.textBox1.Text);
int Y = Convert.ToInt32(this.textBox2.Text);
int Width = Convert.ToInt32(this.textBox3.Text);
int Height = Convert.ToInt32(this.textBox4.Text); Image Myimage = new Bitmap(Width, Height,g1);
Graphics g2 = Graphics.FromImage(Myimage);
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc(); BitBlt(dc2,,,Width,Height,dc1,X,Y,);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2); SaveImageWithQuality(Myimage, level);
this.pictureBox1.Image = Myimage; }
}
设置图片质量的函数,详细介绍:http://www.cnblogs.com/zhaotianff/p/5570321.html
//保存图片时设置质量
private void SaveImageWithQuality(Image bmp,long level)
{ ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
System.Drawing.Imaging.Encoder myEncoder =
System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters();
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[] = myEncoderParameter;
bmp.Save(@"test.jpg", jgpEncoder, myEncoderParameters); } private ImageCodecInfo GetEncoder(ImageFormat format)
{ ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
运行效果:

可惜把自己也截出来了,正在寻找方法不把自己截出来,哈哈。
C#调用Windows API函数截图的更多相关文章
- VBS调用Windows API函数
Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog » 程序设计 » VBS调用Windows API函数 « 用VBS修改Windows用户密码 在VB中创建和使用 ...
- Python调用Windows API函数编写录音机和音乐播放器
功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: 运行界面:
- MFC中调用Windows API函数的方式
windows aoi 函数的调用前面加::
- VBS调用windows api函数(postmessage)实现后台发送按键脚本
'=========================================================================='' VBScript Source File - ...
- c#让窗体永在最前 调用windows api 将窗体设为topmost
有时候应用程序需要将一个窗体始终位于屏幕的最前面,即使切换到其它窗体也能看到该窗体,这样的窗体就叫做TopMost窗体. 用C#制作TopMost窗体之前,首先要了解如何声明SetWindowPos函 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- C#调用windows API的一些方法
使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数. 2. ...
- C#调用windows api示例
这是运行结果: Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提 供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩 展,一般也都提供 ...
- C#中调用Windows API的要点 .
介绍 API(Application Programming Interface),我想大家不会陌生,它是我们Windows编程的常客,虽然基于.Net平台的C#有了强大的类库,但是,我们还是不能否认 ...
随机推荐
- 移动端调试利器 JSConsole 介绍
先看这篇文章 Web应用调试:现在是Weinre和JSConsole,最终会是WebKit的远程调试协议. 我们先不看未来,从此文可见,当下的移动端调试还是 Weinre 和 JSConsole 的天 ...
- SignalR与ActiveMQ结合构建实时通信
一.概述 本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互 SignalR如何和消息队列交互(暂使用ActiveMQ消息队列) SignalR寄宿在web中和其他Signa ...
- web安全——目录
说明 写这个目录是为了方便阅读.也是为了记录统一的问题. 这个系列,并不一定是全的,也不一定是对的,所以请大家多做过滤. 这里面场景比较多的是本人在实践中遇到的问题,然后自己思考抽象的. 目录 web ...
- Button、ImageButton及ImageView详解
Button.ImageButton及ImageView详解 在应用程序开发过程中,很多时候需要将View的background或者src属性设置为图片,即美观又支持点击等操作.常见的有Button. ...
- 提高Visual Studio开发性能的几款插件
通过打开Visual Studio,单机TOOLS—Extensions and Updates-Online-Visual Studio Gallery(工具-扩展和更新-联网-Visual Stu ...
- 20151120 - 蓝牙鼠标与 WiFi 冲突的解决办法
问题现象描述:Windows 下蓝牙鼠标移动时不连贯 电脑:Dell 2015 版 NEW XPS 15 鼠标:Microsoft Bluetooth Designer Mouse 操作系统:Wind ...
- iOS-- 快速集成iOS基于RTMP的视频推流
效果图 iTools有点卡, 但是推到服务器倒是很快的. 推流 前言 这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有 ...
- 手把手windows64位配置安装python2.7
这几天公司要用到python的一些算法,让我调研一番,之前对Python一次没接触的我在安装配置环境的时候由于版本的问题,折腾了好久,这里简单介绍一下我的安装方法,需要安装pyhton的朋友可以不再向 ...
- 最完整的Elasticsearch 基础教程
翻译:潘飞(tinylambda@gmail.com) 基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Ela ...
- [转]JAVA设计模式之单例模式
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...