界面如下:

下面放了一个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函数截图的更多相关文章

  1. VBS调用Windows API函数

    Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog  »  程序设计  »  VBS调用Windows API函数 « 用VBS修改Windows用户密码 在VB中创建和使用 ...

  2. Python调用Windows API函数编写录音机和音乐播放器

    功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: ​ 运行界面: ​

  3. MFC中调用Windows API函数的方式

    windows aoi 函数的调用前面加::

  4. VBS调用windows api函数(postmessage)实现后台发送按键脚本

    '=========================================================================='' VBScript Source File - ...

  5. c#让窗体永在最前 调用windows api 将窗体设为topmost

    有时候应用程序需要将一个窗体始终位于屏幕的最前面,即使切换到其它窗体也能看到该窗体,这样的窗体就叫做TopMost窗体. 用C#制作TopMost窗体之前,首先要了解如何声明SetWindowPos函 ...

  6. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  7. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  8. C#调用windows api示例

    这是运行结果: Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提 供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩 展,一般也都提供 ...

  9. C#中调用Windows API的要点 .

    介绍 API(Application Programming Interface),我想大家不会陌生,它是我们Windows编程的常客,虽然基于.Net平台的C#有了强大的类库,但是,我们还是不能否认 ...

随机推荐

  1. 【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法

    有时候我们需要将基本数据类型转化为字节,以便写入文件,然后必要时还需要将这些字节读出来.有人说,为啥不把数字直接存进文件呢?比如:100,000,000,我们直接存数字明文到文件那就是9个字符(cha ...

  2. 强迫症的福利——我的第一个VS插件,对using排序!

    首先来看看VS自带的using整理功能: 长短不一,看着让人生厌!这是哪个门子的整理?越来越乱了好吗! 难道就没有一款,由短到长——金字塔搬的排序方案吗? 于是各种百度: “VS 插件 using排序 ...

  3. checkboxlist 下拉框多选功能 ,模拟dropdownlist带复选框效果

    前台代码 01.<html xmlns="http://www.w3.org/1999/xhtml"> 02.<head runat="server&q ...

  4. 安装.NET Framework后程序无法启动的错误处理

    最近发现一直在使用的Database.NET软件无法正常使用了,表现为当尝试进行Sql Server的连接创建时,直接报错 在事件查看器具体错误信息为: 日志名称:          Applicat ...

  5. MATLAB 中NORM运用

    格式:n=norm(A,p)功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释 NORM   Matrix or vector ...

  6. Social Emotional Computing -情感模式与价值变化

    情感模式与价值变化 第七节 情感模式与价值变化 情感与价值的关系是主观与客观的关系,人的情感不管多么飘忽不定,都可以找到它的价值对应物,情感的任何变化都可以从价值关系的变动中找到它的客观动因,情感的不 ...

  7. RHCE实验环境|rhel7-lab

    教学环境说明: 1.yum源地址是:http://content.example.com 2.网卡都用同一个,且自定义网卡! 3.网络配置参考 classroom IP 172.25.254.254/ ...

  8. less 学习 (计划终于执行了啊,不再拖延了)

    1.less是什么? 答:将CSS赋予动态语言的特性,   变量,继承,运算,函数. (less就是一个用js实现的CSS解析器,运行要依赖js引擎). 2.运行原理: 按照指定语法规则写好less文 ...

  9. 开发错误记录8:Unable to instantiate application com

    开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在And ...

  10. PHP 解析 ElasticSearch 的 json 方法,有關遍歷所有 json 元素

    以下是eleasticsearch返回的json資料:{"took" : 12,"timed_out" : false,"_shards" ...