C++实现屏幕截图(全屏截图)
最近维护的项目,在某些情况下,光有日志还不行,于是添加了截图功能,特定情况下,会自动截图,辅助分析,从而改进程序。以下是截图实现代码。
void CDemoDlg::ScreenShot(void)
{CWnd *pDesktop = GetDesktopWindow();CDC *pdeskdc = pDesktop->GetDC();CRect re;//获取窗口的大小pDesktop->GetClientRect(&re);CBitmap bmp;bmp.CreateCompatibleBitmap(pdeskdc, re.Width(), re.Height());//创建一个兼容的内存画板CDC memorydc;memorydc.CreateCompatibleDC(pdeskdc);//选中画笔CBitmap *pold = memorydc.SelectObject(&bmp);//绘制图像memorydc.BitBlt(0, 0, re.Width(), re.Height(), pdeskdc, 0, 0, SRCCOPY);//获取鼠标位置,然后添加鼠标图像CPoint po;GetCursorPos(&po);HICON hinco = (HICON)GetCursor();memorydc.DrawIcon(po.x - 10, po.y - 10, hinco);//选中原来的画笔memorydc.SelectObject(pold);BITMAP bit;bmp.GetBitmap(&bit);//定义 图像大小(单位:byte)DWORD size = bit.bmWidthBytes * bit.bmHeight;LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR, size);//后面是创建一个bmp文件的必须文件头BITMAPINFOHEADER pbitinfo;pbitinfo.biBitCount = 24;pbitinfo.biClrImportant = 0;pbitinfo.biCompression = BI_RGB;pbitinfo.biHeight = bit.bmHeight;pbitinfo.biPlanes = 1;pbitinfo.biSize = sizeof(BITMAPINFOHEADER);pbitinfo.biSizeImage = size;pbitinfo.biWidth = bit.bmWidth;pbitinfo.biXPelsPerMeter = 0;pbitinfo.biYPelsPerMeter = 0;GetDIBits(pdeskdc->m_hDC, bmp, 0, pbitinfo.biHeight, lpdata, (BITMAPINFO*)&pbitinfo, DIB_RGB_COLORS);BITMAPFILEHEADER bfh;bfh.bfReserved1 = bfh.bfReserved2 = 0;bfh.bfType = ((WORD)('M' << 8) | 'B');bfh.bfSize = size + 54;bfh.bfOffBits = 54;//写入文件CFile file;CString strFileName(GetAppPathW().c_str());strFileName += _T("ScreenShot\\");CreateDirectory((LPCTSTR)strFileName, NULL);CTime t = CTime::GetCurrentTime();CString tt = t.Format("%Y-%m-%d_%H-%M-%S");strFileName += tt;strFileName += _T(".bmp");if (file.Open((LPCTSTR)strFileName, CFile::modeCreate | CFile::modeWrite)){file.Write(&bfh, sizeof(BITMAPFILEHEADER));file.Write(&pbitinfo, sizeof(BITMAPINFOHEADER));file.Write(lpdata, size);file.Close();}GlobalFree(lpdata);
}
代码注释详尽,我就不多说啥了,保存为bmp无损文件,体积会有些大,处女座的朋友可以转化为png格式保存哦。
C++实现屏幕截图(全屏截图)相关推荐
- 使用Selenium Webdriver进行全屏截图
在任何网页测试人员中,执行效果最好的操作之一就是对网页进行截图. 每当测试人员发现并报告错误时,如果不支持该问题的屏幕截图甚至视频,就不会认真对待该错误. 不论您进行的测试类型是什么,包括硒自动化测试 ...
- Unity 实用代码 小工具
Unity 实用代码 小工具 Unity 屏幕截图 全屏截图方法 全屏截图方法 带委托事件 自定义截图方法 自定义截图方法 带委托 延迟工具 携程延迟方法 携程延迟带委托方法 场景加载 场景加载 方法 ...
- java截全屏,Selenium+Java屏幕截图-网页全屏截图or当前可见内容截图
使用场景 WebUI自动化测试框架中错误截图方法,需要进行全屏幕截取or当前窗口截取 解决方案 导入Ashot的maven依赖,使用Ashot不同的截图策略 ru.yandex.qatools.ash ...
- 用Python进行屏幕截图,只用两行代码搞定
一.计算机中如何进行屏幕截图呢? 1.全屏截图 按下键盘中的'PRTSC'或者'Print Screen'键,即可实现全屏截图(不同键盘位置和名称可能不同).此时,并不能看到效果,只是将截图保存在粘贴 ...
- chrome 全屏截图_如何在不带扩展功能的Chrome中拍摄全屏截图
chrome 全屏截图 We spend a considerable portion of our time using a web browser. Sometimes we may need t ...
- Win10屏幕截图无法使用怎么回事
Win10屏幕截图无法使用怎么回事?如果用户的电脑有些本应该有的功能无法使用,那么说明系统本身没有安装这些软件,也许是精简版系统,或者是系统使用过程中缺少了某些文件,用户可以尝试去Microsoft ...
- 如何在Windows中使用截图工具进行屏幕截图
There are lots of tools out there for taking screenshots in Windows. However, you may not need to in ...
- linux下截图软件,Flameshot - Linux下功能强大的屏幕截图软件
今天推荐大家使用Flameshot(火焰),因为它是我个人最喜欢屏幕截图软件.如果你不知道,Flameshot是一个Linux可用的开源截屏工具. 在本文中,我将重点介绍"Flameshot ...
- snipaste如何滚动截图_Windows系统的几种屏幕截图方法
我们在写作电脑教程或笔记类文章时,配上操作运行时的一些屏幕截图,可以让文章更加明白易懂.那么,您一般都是用什么方法截图呢? 我看到网上的工具教程文章,学习使用了 Windows系统的几种屏幕截图方法, ...
- 截取计算机全屏画面的方法有,全屏截图快捷键的快捷键是什么
我们在使用电脑的工作或者生活中,可能经常遇到要截图的情况,假如我们只是局部截图的话,我们使用QQ聊天框中的截图空间即可轻松实现,那么有时候我们要把整个屏幕上的画面全部截取下来应该怎么操作呢?今天笔者就 ...
最新文章
- 数据结构和算法:(3)3.1线性表的顺序存储结构
- 华硕路由器安装aria2_网易UU加速器联动华硕,瞄准主机玩家联网刚需
- python爬网页源码_python爬虫爬取网页的内容和网页源码不同?
- asp 检查黑名单_十九、绕过黑名单检查实现文件上传2
- java snmp walk_snmpwalk用法
- 扎克伯格做了26张PPT,员工效率提10倍,已被疯狂传阅!
- dwr java有返回值但是js获取不到返回值_一探究竟:Java反射效率低的原因到底在哪?...
- HTML中常见的其它标签
- PHPExcel 导出带生成图片完美案例
- re模块和正则表达式
- SM2算法第十篇:数字证书及CA的扫盲介绍
- 【Excel】数据透视表—标签合并居中
- 北京挪动推出神州行5元卡套餐
- 导向滤波与opencv python实现
- 华为、华三交换机查看光模块收发光及光模块信息
- html5脑图_使用HTML5技术绘制思维导图
- 如何快速画好一张程序流程图
- 微信分享签名无效php_【求助】微信分享朋友圈失效
- 混合云是什么,混合云是怎么工作的?
- 刀剑封魔录多功能修改器 v1.2使用教程