首页 > 代码库 > 窗口截图
窗口截图
窗口截图,可以获取遮挡窗口完整的图像,并保存到bmp文件中去。主要用到的函数中PrintWindow,VC6不支持该函数,请使用VS2008来编译。其它需求如平台要求请参考MSDN文档。
1 void SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath) 2 { 3 HDC hDC = ::GetWindowDC(hWnd); 4 ASSERT(hDC); 5 6 HDC hMemDC = ::CreateCompatibleDC(hDC); 7 ASSERT(hMemDC); 8 9 RECT rc;10 ::GetWindowRect(hWnd, &rc);11 12 HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, rc.right - rc.left, rc.bottom - rc.top);13 ASSERT(hBitmap);14 15 HBITMAP hOldBmp = (HBITMAP)::SelectObject(hMemDC, hBitmap);16 ::PrintWindow(hWnd, hMemDC, 0);17 18 BITMAP bitmap = {0};19 ::GetObject(hBitmap, sizeof(BITMAP), &bitmap);20 BITMAPINFOHEADER bi = {0};21 BITMAPFILEHEADER bf = {0};22 23 CONST int nBitCount = 24;24 bi.biSize = sizeof(BITMAPINFOHEADER);25 bi.biWidth = bitmap.bmWidth;26 bi.biHeight = bitmap.bmHeight;27 bi.biPlanes = 1;28 bi.biBitCount = nBitCount;29 bi.biCompression = BI_RGB;30 DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight;31 32 HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER));33 LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);34 *lpbi = bi;35 36 ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS);37 38 try39 {40 CFile file;41 file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite);42 bf.bfType = 0x4d42;43 dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);44 bf.bfSize = dwSize;45 bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);46 47 file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER));48 file.Write((BYTE*)lpbi, dwSize);49 file.Close();50 }51 catch(CFileException* e)52 {53 e->ReportError();54 e->Delete();55 }56 57 GlobalUnlock(hDib);58 GlobalFree(hDib);59 60 ::SelectObject(hMemDC, hOldBmp);61 ::DeleteObject(hBitmap); 62 ::DeleteObject(hMemDC);63 ::ReleaseDC(hWnd, hDC);64 }65 66 // 调用方法67 HWND hWnd = ::FindWindow(NULL, _T("XXX"));68 if(hWnd)69 {70 SaveHwndToBmpFile(hWnd, _T("F://12.bmp"));71 }
文章来源:http://blog.csdn.net/visualeleven/article/details/6206715
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。