#include <windows.h>
#include <stdint.h>
#include <stdio.h> void ShootScreen(const char* filename, HWND hWnd)
{
HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
int32_t ScrWidth = , ScrHeight = ;
RECT rect = { };
if (hWnd == NULL)
{
ScrWidth = GetDeviceCaps(hdc, HORZRES);
ScrHeight = GetDeviceCaps(hdc, VERTRES);
}
else
{
GetWindowRect(hWnd, &rect);
ScrWidth = rect.right - rect.left;
ScrHeight = rect.bottom - rect.top;
}
HDC hmdc = CreateCompatibleDC(hdc); HBITMAP hBmpScreen = CreateCompatibleBitmap(hdc, ScrWidth, ScrHeight);
HBITMAP holdbmp = (HBITMAP)SelectObject(hmdc, hBmpScreen); BITMAP bm;
GetObject(hBmpScreen, sizeof(bm), &bm); BITMAPINFOHEADER bi = { };
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = bm.bmPlanes;
bi.biBitCount = bm.bmBitsPixel;
bi.biCompression = BI_RGB;
bi.biSizeImage = bm.bmHeight * bm.bmWidthBytes;
  // 图片的像素数据
char *buf = new char[bi.biSizeImage];
BitBlt(hmdc, , , ScrWidth, ScrHeight, hdc, rect.left, rect.top, SRCCOPY);
GetDIBits(hmdc, hBmpScreen, 0L, (DWORD)ScrHeight, buf, (LPBITMAPINFO)&bi, (DWORD)DIB_RGB_COLORS); BITMAPFILEHEADER bfh = { };
bfh.bfType = ((WORD)('M' << ) | 'B');
bfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bi.biSizeImage;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
HANDLE hFile = CreateFile(filename, GENERIC_WRITE, , , OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, );
DWORD dwWrite;
WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dwWrite, NULL);
WriteFile(hFile, &bi, sizeof(BITMAPINFOHEADER), &dwWrite, NULL);
WriteFile(hFile, buf, bi.biSizeImage, &dwWrite, NULL);
CloseHandle(hFile);
hBmpScreen = (HBITMAP)SelectObject(hmdc, holdbmp);
} int32_t main()
{
char name[] = {};
for (int32_t i = ; i < ; ++i)
{
sprintf_s(name, , "%d.bmp", i);
printf("shooting %s\n", name);
ShootScreen(name, NULL);
Sleep();
}
return ;
}

参考文章:http://blog.csdn.net/dazhong159/article/details/7909964

C++ 在Windows下截取整个屏幕 和 指定句柄窗口的屏幕的更多相关文章

  1. windows下安装virtualenv并且配置指定环境

    下面是在windows下通过virtualenv创建虚拟环境, 包括 : 1. 安装virtualenv(使用pip可直接安装) 2. 使用virtualenv创建指定版本的虚拟环境 3. 进入虚拟环 ...

  2. windows下搭建Kafka,并通过命令窗口收发消息

    参考网址: https://blog.csdn.net/ydc321/article/details/70154278 前提条件:windows环境需要安装jdk 1.下载Kafka,可以通过官网下载 ...

  3. Windows 下通过DOS命令获取指定文件夹下所有文件的全路径

    1.在你要获取路径的文件夹下 新建文本文档 (.txt) 文件, 2.输入以下内容保存 DIR *.* /S/B >LIST.TXT /s 表示递归 3. 将文件后缀改成 .bat 4.双击运行 ...

  4. windows下 pip下载包到指定目录

    pip download -r requirements.txt -d G:\PythonVirtualenv\packages python setup.py install

  5. Windows下同时安装了Python2与Python3时如何使用RobotFrameWork

    由于windows下不能像linux那样指定python文件的运行路径,当电脑中即安装了python2,又安装了python3时,也不能在环境变量中都配置运行路径吧(当然是可以配置的,系统会按照靠前的 ...

  6. redis在windows下安装教程

    安装过程 1.首先先把下载的压缩包解压到一个文件夹中2.打开cmd指令窗口3.输入你刚才解压的文件路径4.然后输入redis-server redis.windows.conf 命令接下来部署Redi ...

  7. windows下实现屏幕分享(C#)

    采用UDP广播进行数据的传输,实现windows下进行低延迟的屏幕共享. 开发语言:C# 第三方组件:Redis 1.实现思路 总体流程图 DGIS.DesktopShare实现windows下屏幕分 ...

  8. Windows下使用ffmpeg与java实现截取视频缩略图

    [ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压, ...

  9. 团队软件开发_基于windows下截屏软件关于NABC框架的特点

    经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的 ...

随机推荐

  1. Apache shiro 文章推荐

    均为系列文章,篇幅略长,适合入门. shiro源码分析 跟我学shiro

  2. C++库(Google Breakpad)

    Google Breakpad是什么? 一个开源的多平台崩溃报告系统. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,它支持Windows,Linux和Mac和Solari ...

  3. linux svn 搭建

    原文:http://jingyan.baidu.com/article/3c343ff7039de20d37796306.html和http://blog.sina.com.cn/s/blog_670 ...

  4. 【Java EE 学习 49 下】【Spring学习第一天】【MVC】【注解回顾】

    一.MVC 1.使用Spring有一个非常大的好处,那就是能够实现完全面向接口编程,传统的使用Dao.Service并不能实现完全的面向接口编程. 2.示例:https://github.com/kd ...

  5. Myeclipse Templates详解(一) —— Java模板基础

    目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Mye ...

  6. 移动硬盘安装win7,蓝屏,0x0000007B

    @echo offecho 加载注册表echo.reg load HKLM\sys %1\WINDOWS\system32\config\system >nul 2>nulif error ...

  7. input上传按钮美化

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. LeetCode——Copy List with Random Pointer(带random引用的单链表深拷贝)

    问题: A linked list is given such that each node contains an additional random pointer which could poi ...

  9. MyBabis 用法详解

    MyBatis 一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架(消除了几乎所以得JDBC代码和参数的手工设置及结果集的检索) MyBatis可以使用简单的XML或注解用于配置和原始映射,将 ...

  10. jmeter仅一次控制器

    仅针对 1个线程的 多线程的那个不生效  想实现多次执行某个请求只执行一次 需要设置为单线程 循环次数设置为多次就可以了