窗口截图(二)

news/2024/11/23 3:53:57/

窗口截图,可以获取遮挡窗口完整的图像,并保存到bmp文件中去。主要用到的函数中PrintWindow,VC6不支持该函数,请使用VS2008来编译。其它需求如平台要求请参考MSDN文档。

void SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath) 
{HDC hDC = ::GetWindowDC(hWnd); ASSERT(hDC); HDC hMemDC = ::CreateCompatibleDC(hDC); ASSERT(hMemDC);RECT rc;::GetWindowRect(hWnd, &rc); HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, rc.right - rc.left, rc.bottom - rc.top);ASSERT(hBitmap);HBITMAP hOldBmp = (HBITMAP)::SelectObject(hMemDC, hBitmap); ::PrintWindow(hWnd, hMemDC, 0); BITMAP bitmap = {0}; ::GetObject(hBitmap, sizeof(BITMAP), &bitmap); BITMAPINFOHEADER bi = {0}; BITMAPFILEHEADER bf = {0}; CONST int nBitCount = 24; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bitmap.bmWidth; bi.biHeight = bitmap.bmHeight; bi.biPlanes = 1; bi.biBitCount = nBitCount; bi.biCompression = BI_RGB; DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight; HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER)); LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); *lpbi = bi; ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS); try { CFile file; file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite); bf.bfType = 0x4d42; dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bf.bfSize = dwSize; bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER)); file.Write((BYTE*)lpbi, dwSize); file.Close(); } catch(CFileException* e) { e->ReportError(); e->Delete(); } GlobalUnlock(hDib); GlobalFree(hDib); ::SelectObject(hMemDC, hOldBmp); ::DeleteObject(hBitmap);	::DeleteObject(hMemDC); ::ReleaseDC(hWnd, hDC); 
} // 调用方法 
HWND hWnd = ::FindWindow(NULL, _T("XXX")); 
if(hWnd) 
{SaveHwndToBmpFile(hWnd, _T("F://12.bmp")); 
}

 


http://www.ppmy.cn/news/220999.html

相关文章

Vue.js 中的异步组件是什么?如何使用异步组件?

Vue.js 中的异步组件是什么?如何使用异步组件? 在 Vue.js 中,异步组件是一种延迟加载组件的方式,可以大大提高应用程序的性能和加载速度。本文将介绍 Vue.js 中异步组件的概念、优势以及如何使用异步组件。 什么是异步组件&…

基于深度学习的视频美颜SDK技术创新与应用案例分析

很多人在拍摄视频时会感到自己的皮肤不够好看,因此需要使用美颜功能。同时,视频美颜也是很多短视频App的核心功能之一。为了提供更加高效、准确的视频美颜功能,很多公司开始研发基于深度学习的视频美颜SDK技术。 与传统的图像处理技术相比&a…

max delay的应用场景与常见问题

max delay与min delay用来约束start points到endpoints点对点的路径长度,set_max_delay约束最大值,set_min_delay约束最小值。 max delay的-from和-to并不局限在get_pins,get_cells和get_clocks同样可以。 set_max_delay 5 -from UFF0/Q -to UFF1/D set_max_delay -from …

VS2019社区版和QT安装记录

下载 VS2019: Visual Studio 2019 版本 16.11 发行说明 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes选择第一个,下载社区版。或者这里下载。 比较简单的方式就是直接打开,网络安装。但微…

[06 - 02] 难句 - conversation - lecture

主语、形式主语、真正主语的引导词:阴影 谓语、系动词:下划线 ___ 宾语、介词宾语、表语: 蓝字 ( ~~~ ) 插入语:倾斜 ( _._._._ ) 修饰成分:{ } 、[ ]、( ) 并列、转折、固定搭配、被分割的词组、重点词汇&…

10月国内电脑分辨率十强:1920*1080占比破15%

IDC评述网(idcps.com)11月12日报道:根据百度统计最新数据显示,10月份国内电脑分辨率市场基本保持稳定,前十强排名与上月完全一致。其中,冠军1920*1080与第6名360*640的占比成功实现上涨,环比依次…

计算机无故障时间排名,哪个电脑平均无故障运行时间(MTBF)≥30万小时认证吗?...

哪个电脑平均无故障运行时间(MTBF)≥30万小时认证吗? 电脑开机无显示,首先我们要检查的就是是BIOS。主板的BIOS中储存着重要的硬件数据,同时BIOS也是主板中比较脆弱的部分,极易受到破坏,一旦受损就会导致系统无法运行&…

桌面linux 排行榜,观点|自由之选:七大顶尖 Linux 桌面环境比拼

与Windows或者OS X不同,Linux阵营拥有大量桌面环境方案供大家选择,而这些方案亦各自拥有不同的外观设计与功能定位。 面对Linux阵营,我们首先需要解决的问题就是选择。选择适合自己的发行版是畅游Linux世界的第一步,但目前可供挑选…