C++实现屏幕截图功能
2018-05-15 14:09
796 查看
本文实例为大家分享了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#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
- JAVA功能代码《6》----用Java实现屏幕截图
- windowsSDK实现 屏幕实时监控 热键截图 功能
- 实现windows下屏幕指定区域截图功能
- C++实现屏幕截图(全屏截图)
- Vb.net2005实现屏幕截图功能
- Qt5:Qt中屏幕或窗口截图功能的实现
- C++实现屏幕截图
- C++实现的屏幕截图(PNG或BMP)
- 获取和保存当前屏幕的截图 实现的C++代码如下
- 用gdi 实现屏幕截图功能
- C++实现删除单链表节点的功能(源代码+截图)
- 在网页中实现QQ的屏幕截图功能
- [Starling] RenderTexture - 屏幕截图、角色残影功能的实现基础
- java实现屏幕截图功能并保存截图
- 屏幕截图功能实现
- C++实现屏幕截图的方法
- java代码实现截图功能(屏幕截图)
- C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
- Android 5.0及以上编程实现屏幕截图功能的方法