分成两个部分,一个是用getScrnBmp函数使用Windows API获取BMP图像,getJpg函数使用atlimage类实现将bmp压缩成jpg格式,注意不像jpeglib一样,压缩的出的jpg图像是无法选择清晰度的。

struct scrnStrc
{BYTE *bff;int sz;
};struct scrnStrc* ScrnCls::getScrnBmp()
{//得到设备屏幕HDC hDc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);int wdth, hght;wdth = GetSystemMetrics(SM_CXSCREEN);hght = GetSystemMetrics(SM_CYSCREEN);   //获得屏幕像素数HDC hMDc = CreateCompatibleDC(hDc);  //创建一个与指定设备兼容的内存设备上下文环境HBITMAP hBmp = CreateCompatibleBitmap(hDc, wdth, hght); //创建与指定的设备环境相关的设备兼容的位图SelectObject(hMDc, hBmp);  //选择一对象到指定的设备上下文环境中 将hBmp送到hMDc上下文环境中BITMAP bmp;GetObject(hBmp, sizeof(bmp), &bmp);      //获取图像信息BitBlt(hMDc, 0, 0, wdth, hght, hDc, 0, 0, SRCCOPY);   //从hDc拷贝到hMDcbyte* byt;DWORD sz;ScrnCls::getJpg(hBmp,&byt,&sz);struct scrnStrc  *strc=(struct scrnStrc *)malloc(sizeof(struct scrnStrc));strc->bff =byt;strc->sz =sz;cnt++;return strc;}int ScrnCls::getJpg(HBITMAP hBmp,byte ** bytArr,DWORD * sz)
{CImage *img= new CImage;img->Attach(hBmp);//HGLOBAL hg;//hg = GlobalAlloc(GMEM_NODISCARD | GMEM_ZEROINIT | GMEM_MOVEABLE, 0x100000);IStream* is=NULL;CreateStreamOnHGlobal(NULL, FALSE, &is);  //不需要申请HGlobal空间img->Save(is, Gdiplus::ImageFormatJPEG);LARGE_INTEGER li;li.QuadPart = 0;is->Seek(li, STREAM_SEEK_SET, NULL);  //把流的位置移动到开始处byte* jpgBytArr;STATSTG stt;is->Stat(&stt, STATFLAG_DEFAULT);DWORD szArr,szWrt=0;szArr = (DWORD)stt.cbSize.LowPart;jpgBytArr = (byte*)malloc(szArr + 0x1000);memset(jpgBytArr, 0, sizeof(jpgBytArr));is->Read(jpgBytArr, szArr, &szWrt);*sz = szWrt;//释放资源is->Release();*bytArr = jpgBytArr;return 0;
}

Windows API用以实现屏幕截图的方法相关推荐

  1. windows10屏幕录制_如何在Windows 10中拍摄屏幕截图

    windows10屏幕录制 A screenshot is an image taken of whatever's on your screen. Today we're going to show ...

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

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

  3. c语言删除文件 Windows,基于Windows API实现遍历所有文件并删除的方法

    本文实例讲述了基于Windows API实现遍历所有文件并删除的方法.分享给大家供大家参考.具体分析如下: 最近一直在学windows API,弄了一些好玩的东西(有点恶作剧了,请大家谨慎使用)... ...

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

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

  5. Windows API 函数SendMessage与PostMessage使用方法和常见的坑

    Windows API 函数中 SendMessage 与 PostMessage 用处很大,经常被程序员们使用.对老手们来说,了如知掌,但对新手来说,可能会遇到这样那样的问题.我作为一名老手中的新手 ...

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

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

  7. 挂钩Windows API

    创建时间:2004-03-06 文章属性:原创 文章提交:SoBeIt (kinsephi_at_hotmail.com) ===========================[ 挂钩Windows ...

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

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

  9. Windows API函数速查

    http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...

最新文章

  1. 反正我不信!马斯克谈元宇宙:没人愿意把屏幕贴脸上
  2. python分类器鸢尾花怎么写_python机器学习基础教程-鸢尾花分类
  3. ICLR2020 | CS-GNN:用平滑度刻画图信息的使用
  4. java mapreduce编程_Hadoop实验——MapReduce编程(1)
  5. 扬州古城门高挂大红春联迎新春 环卫工受邀揭幕
  6. C++ Primer 5th笔记(10)chapter10 泛型算法 :lambda
  7. 关于Android构建
  8. 《互联网公司工程师图鉴》
  9. Mybatis 常用语句
  10. 赚钱的逻辑和赚钱的道具要发生改变
  11. html中logo不变形,CSS3如何实现LOGO中的文本变形动画
  12. 14_python_练习题——excel操作
  13. centos7轻松搭建文件服务器
  14. meta分析的基本步骤是什么-附实例讲解,meta分析七步快速见刊策略
  15. 这个用JAVA开发的全开源商城系统可免费商用
  16. 程序猿DD《Spring Boot基础教程》系列汇总
  17. Windows安装虚拟机VMware
  18. 使用C#创建简单的联系人备忘录
  19. pycharm破解补丁激活
  20. android tv box ---- 插入u盘直接播放指定文件夹中的视频

热门文章

  1. spring源码阅读笔记09:循环依赖
  2. 怎样将PDF中指定页面方向进行旋转
  3. Qt 实现Unicode字符表情包显示到界面 Emoji
  4. linux /etc/motd,Linux 修改进站提示 /etc/motd
  5. android字体大小根据分辨率自动调整
  6. 月中工作总结_在全职工作的9个月中,我是如何从新手转到软件工程师的
  7. 谷歌是如何以简洁赢取用户的
  8. java简单冒泡排序代码,跳槽大厂必看!
  9. mysql show processlist整理
  10. STAF 删除文件操作