參考:http://bbs.csdn.net/topics/330154355

#include "stdio.h"
#include "windows.h"
/************************************************************************/
/* hBitmap    为刚才的屏幕位图句柄
/* lpFileName 为须要保存的位图文件名称
/************************************************************************/
int SaveBitmapToFile(HBITMAP hBitmap,LPSTR lpFileName)
{         HDC            hDC; //设备描写叙述表int            iBits;//当前显示分辨率下每一个像素所占字节数WORD           wBitCount;//位图中每一个像素所占字节数    DWORD          dwPaletteSize=0;//定义调色板大小DWORD          dwBmBitsSize;//位图中像素字节大小DWORD          dwDIBSize;// 位图文件大小DWORD          dwWritten;//写入文件字节数BITMAP         Bitmap;//位图结构BITMAPFILEHEADER   bmfHdr;   //位图属性结构   BITMAPINFOHEADER   bi;       //位图文件头结构LPBITMAPINFOHEADER lpbi;     //位图信息头结构     指向位图信息头结构HANDLE          fh;//定义文件句柄HANDLE            hDib;//分配内存句柄HANDLE            hPal;//分配内存句柄HANDLE          hOldPal=NULL;//调色板句柄  //计算位图文件每一个像素所占字节数   hDC = CreateDC("DISPLAY",NULL,NULL,NULL);   iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);   DeleteDC(hDC);if (iBits <= 1)       wBitCount = 1;   else if (iBits <= 4)       wBitCount = 4;   else if (iBits <= 8)       wBitCount = 8;   else if (iBits <= 24)wBitCount = 24;else if (iBits<=32)wBitCount = 24;//计算调色板大小   if (wBitCount <= 8)       dwPaletteSize = (1 << wBitCount) *sizeof(RGBQUAD);//设置位图信息头结构   GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);   bi.biSize            = sizeof(BITMAPINFOHEADER);   bi.biWidth           = Bitmap.bmWidth;   bi.biHeight          = Bitmap.bmHeight;   bi.biPlanes          = 1;   bi.biBitCount         = wBitCount;       bi.biCompression      = BI_RGB;   bi.biSizeImage        = 0;   bi.biXPelsPerMeter     = 0;   bi.biYPelsPerMeter     = 0;   bi.biClrUsed         = 0;   bi.biClrImportant      = 0;   dwBmBitsSize = ((Bitmap.bmWidth *wBitCount+31)/32)* 4*Bitmap.bmHeight ;//为位图内容分配内存   hDib  = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));   lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);if (lpbi==NULL){return 0;}*lpbi = bi;   // 处理调色板hPal = GetStockObject(DEFAULT_PALETTE);   if (hPal){       hDC  = GetDC(NULL);       hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);       RealizePalette(hDC);       }   // 获取该调色板下新的像素值   GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,       (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);   //恢复调色板      if (hOldPal)       {       SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);       RealizePalette(hDC);       ReleaseDC(NULL, hDC);       }   //创建位图文件       fh = CreateFile(lpFileName, GENERIC_WRITE,        0, NULL, CREATE_ALWAYS,       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);   if (fh == INVALID_HANDLE_VALUE)       return FALSE;// 设置位图文件头   bmfHdr.bfType = 0x4D42;  // "BM"   dwDIBSize    = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+ dwPaletteSize + dwBmBitsSize;     bmfHdr.bfSize = dwDIBSize;   bmfHdr.bfReserved1 = 0;   bmfHdr.bfReserved2 = 0;   bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER)+ dwPaletteSize;// 写入位图文件头   WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);// 写入位图文件其余内容   WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);//清除      GlobalUnlock(hDib);   GlobalFree(hDib);   CloseHandle(fh);return 1;
}HBITMAP   GetCaptureBmp()
{HDC     hDC;   HDC     MemDC;   BYTE*   Data;   HBITMAP   hBmp;   BITMAPINFO   bi;   memset(&bi,   0,   sizeof(bi));   bi.bmiHeader.biSize   =   sizeof(BITMAPINFO);bi.bmiHeader.biWidth   =  GetSystemMetrics(SM_CXSCREEN);   bi.bmiHeader.biHeight   = GetSystemMetrics(SM_CYSCREEN);   bi.bmiHeader.biPlanes   =   1;   bi.bmiHeader.biBitCount   =   24;   hDC   =   GetDC(NULL);   MemDC   =   CreateCompatibleDC(hDC);   hBmp   =   CreateDIBSection(MemDC,   &bi, DIB_RGB_COLORS,   (void**)&Data,   NULL,   0);   SelectObject(MemDC,   hBmp);   BitBlt(MemDC,   0,   0,   bi.bmiHeader.biWidth,   bi.bmiHeader.biHeight,hDC,   0,   0,   SRCCOPY);   ReleaseDC(NULL,   hDC);     DeleteDC(MemDC);   return   hBmp;
}   void main()
{HBITMAP   hBmp;    hBmp   =   GetCaptureBmp(); SaveBitmapToFile(hBmp,"c:\\11.bmp");
}

windows API 实现截图相关推荐

  1. 调用Windows api 窗口截图

    分别调用windows api函数及CVI自带函数,完成对GRAPH界面的截图 界面设计如下图,右侧为graph控件的位置信息,调用API函数是完成对于选择窗口的固定位置进行截图,调用CVI自带函数则 ...

  2. python windows api截图_Python调用windows API实现屏幕截图

    Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 不跨平台 import time import win32gui, win32ui, win32con, ...

  3. python怎么保存到桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...

    python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip install numpy==1.15.3 pip install ope ...

  4. python3应用windows api对后台程序窗口及桌面截图并保存

    目录 python的版本及依赖的库的安装 对后台窗口截图 对桌面截图 python的版本及依赖的库的安装 #版本python 3.7.1 pip install pywin32==224 pip in ...

  5. pythonenumapi_Python调用windows API实现屏幕截图

    Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 不跨平台 import time import win32gui, win32ui, win32con, ...

  6. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

    标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 作 者: shayi 时 间: 2015-02-12,05:19:54 链 ...

  7. C/C++中Windows API 简单的(Callback)回调机制

    首先来说说什么是调用和回调 当一个程序调用windows API时的过程称为Call 当windows API调用程序里面的函数时这称之为Callback 下面举一个简单的例子来说明回调的用途 编写一 ...

  8. 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:

    案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下: 1 ...

  9. C#通过Windows API捕获窗,获取窗口文本(FindWindow、GetWindowText),附录:Windows窗口消息大全、Windows API大全

    文章目录 一.前言 二.使用Spy++工具分析窗口 三.C#通过Windows API捕获窗口,获取窗口文本 四.附录:Windows窗口消息 五.Windows API大全 1.API之网络函数 2 ...

最新文章

  1. 修改CentOS yum源
  2. 美多商城之项目准备-工程创建和配置
  3. 【加州理工】什么是模仿学习(Imitation Learning(模仿学习), 这62页ppt带你了解进展...
  4. java 打印日志log_java如何LOG打印出日志信息
  5. 自动化监控--zabbix中的邮件报警通知详解
  6. 2、C#基础 - Visual Studio 的版本选择和下载
  7. ubuntu14.04配置caffe
  8. 工作的时候用到spring返回xml view查到此文章亲测可用
  9. 近300个 Windows 10 可执行文件易受 DLL 劫持攻击
  10. 使用kubeadm安装部署k8s
  11. 教你如何发布自己的网站
  12. 通信:5G孕育上游投资空间
  13. 墙绘装饰设计公司网站织梦模板免费下载
  14. 天蓝-skyblue迁移到博客园
  15. paper:Attention Is All You Need(模型篇)
  16. 2022-2028年中国三元锂电池行业市场运营格局及前景战略分析报告
  17. 分布式文件系统FastDFS集群搭建
  18. wlan从入门到精通第四期WLAN常用概念
  19. element ui 实现表格分页
  20. 【爱的瓶子xp主题】

热门文章

  1. C语言计算月份天数if,阅读下列说明,回答问题1至问题3。【说明】 以下代码由C语言书写,能根据指定的年、月计算当月所含天数 - 赏学吧...
  2. KFold、StratifiedKFold、GroupKFold的区别
  3. 动效引擎_汇众教育 | 高级引擎视效包装设计
  4. 使用tab键分割的文章能快速转换成表格。( )_Word 多级列表编号方法总结(一)——快速入门
  5. php7 安装zendopcache,安装PHP加速插件ZendOpcache
  6. icloud连接服务器时出现问题_ios13 ipad/iphone与windows 连接传输文件显示连接服务器用户或密码无效解决方法...
  7. vue学习:vue中data和return data的区别
  8. 笔记-信息系统开发基础-面向对象基本概念-对象和类
  9. 笔记-信息系统开发基础-CMMI组织能力成熟度模型-连续式和阶梯式的分组
  10. 项目管理如何调动员工的积极性?