窗口截图(可指定HWND窗口句柄)(三篇文章)

[cpp] view plain copy

  1. BOOL SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath)
  2. {
  3. HWND hDesktop = ::GetDesktopWindow();
  4. ASSERT(hDesktop);
  5. if(NULL == hWnd)
  6. {
  7. hWnd = hDesktop;
  8. }
  9. RECT rect;
  10. ::GetWindowRect(hWnd, &rect);
  11. int nWidht = rect.right - rect.left;
  12. int nHeight = rect.bottom - rect.top;
  13. HDC hSrcDC = ::GetWindowDC(hWnd);
  14. ASSERT(hSrcDC);
  15. HDC hMemDC = ::CreateCompatibleDC(hSrcDC);
  16. ASSERT(hMemDC);
  17. HBITMAP hBitmap = ::CreateCompatibleBitmap(hSrcDC, nWidht, nHeight);
  18. ASSERT(hBitmap);
  19. HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap);
  20. ::BitBlt(hMemDC, 0, 0, nWidht, nHeight, hSrcDC, 0, 0, SRCCOPY);
  21. BITMAP bitmap = {0};
  22. ::GetObject(hBitmap, sizeof(BITMAP), &bitmap);
  23. BITMAPINFOHEADER bi = {0};
  24. BITMAPFILEHEADER bf = {0};
  25. CONST int nBitCount = 24;
  26. bi.biSize = sizeof(BITMAPINFOHEADER);
  27. bi.biWidth = bitmap.bmWidth;
  28. bi.biHeight = bitmap.bmHeight;
  29. bi.biPlanes = 1;
  30. bi.biBitCount = nBitCount;
  31. bi.biCompression = BI_RGB;
  32. DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight;
  33. HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER));
  34. LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
  35. *lpbi = bi;
  36. ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS);
  37. try
  38. {
  39. CFile file;
  40. file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite);
  41. bf.bfType = 0x4d42;
  42. dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
  43. bf.bfSize = dwSize;
  44. bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
  45. file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER));
  46. file.Write((BYTE*)lpbi, dwSize);
  47. file.Close();
  48. }
  49. catch(CFileException* e)
  50. {
  51. e->ReportError();
  52. e->Delete();
  53. }
  54. GlobalUnlock(hDib);
  55. GlobalFree(hDib);
  56. ::SelectObject(hMemDC, hOldBitmap);
  57. ::DeleteObject(hBitmap);
  58. ::DeleteDC(hMemDC);
  59. ::ReleaseDC(hWnd, hSrcDC);
  60. return TRUE;
  61. }
  62. // 调用方法
  63. HWND hWnd = ::FindWindow(NULL, _T("XXX"));
  64. if(hWnd)
  65. {
  66. SaveHwndToBmpFile(hWnd, _T("F://12.bmp"));
  67. }

http://blog.csdn.net/visualeleven/article/details/6202796

http://blog.csdn.net/visualeleven/article/details/6206715

http://blog.csdn.net/visualeleven/article/details/6093484

时间: 2024-12-18 00:05:47

窗口截图(可指定HWND窗口句柄)(三篇文章)的相关文章

浅析RAC下SPFILE文件修改之整理三篇文章

关于RAC下spfile浅析_整理于_2014.4.17 第一篇:RAC下SPFILE文件修改 在RAC下spfile位置的修改与单节点环境不完全一致,有些地方需要特别注意,否则可能修改会失败. 下面用一个例子说明:SPFILE放在ASM中一个不正确的目录(+ARCH)中,现在想把它放在另外一个目录(+DBSYS)下. 以下是具体步骤: 1. 原spfile位置 SQL> show parameter spfile NAME TYPE VALUE ------------------------

三篇文章带你极速入门php(三)之php原生实现登陆注册

看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥见一般php开发的样子了.不过,low的地方区别提前说一下: 这个是多入口,一般程序都是单入口,单入口就是统一通过index.php进入,然后再引入其他文件,调用其代码,多入口就是每次通过不同文件进入(比如一会展示的login.php和register.php) 保留登陆信息用的是session,现在普遍

C++ crash 堆栈信息获取(三篇文章)

最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android工程,这个时候dump文件没有了优势,那么只能在程序 creash时把内存信息打印出来,获取输出到文件中.    下面讲述下我在做堆栈信息获取时的一些经验: 文章1:在Windows下如何在程序中获得当前调用栈信息文章2:让程序在崩溃时体面的退出之Dump文件文章3:让程序在崩溃时体面的退出之Cal

第三篇文章

太阳落山,山林中光线变暗,显得很幽森,暗中有一双双眼睛盯着.血气散发,引来了一些猛兽,还好是在外围区域,没有特别可怕的凶兽. "嗷--" 一头斑纹虎虫窜来,花纹的躯体像只染了色的大蚕,能有五六米长,长着一个虎头,凶猛而狰狞,这条大虫闻到了太古真血的气味,想对狻猊的宝体咬上一口. 噗! 小不点掷出铁矛,直接没入了它的头颅中,一声惨叫,血液溅起,斑纹虎虫满地翻滚,不久后绝了性命. 无声无息,一条水桶粗的飞蟒从一座石崖上扑杀了下来,展开双翅,腥风扑鼻,快要到近前时张开血盆巨口就咬. &quo

mysql第三篇文章~关于linux服务器本身的优化问题

简介:mysql服务优化分为 1服务器本身的优化 2mysql本身的性能优化 今天咱们来讨论下服务器本身的优化性能 一 参数的优化简介 1 文件系统的选择 Linux 常用文件系统: ext3, ext4, XFS, ReiserFS, JFS 其中最常用的是 ext4, XFS.非常不建议用低于ext4版本的文件系统.主流默认是ext4 2 IO调度算法 noop anticipatory deadline cfg四中算法 下面会分别介绍 1)CFQ(完全公平排队I/O调度程序) CFQ的出发

三篇文章带你极速入门php(一)之语法

本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本<php从入门到放弃>,观你根骨清奇10两银子卖给你如何) 看完本文后你会收获到什么 php的变量的定义,使用 函数的定义,使用,传递参数 数组的定义,调用,常用方法,使用场景 php中循环,判断,选择结构的语法 类的定义,成员变量和成员函数的定义和使用 相信我,认真看完本文,你就已经掌握了php常

Spring Cloud第三篇 | 搭建高可用Eureka注册中心

? ?本文是Spring Cloud专栏的第三篇文章,了解前两篇文章内容有助于更好的理解后面文章: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 ? 一.Eureka注册中心高可用集群概述 1-1.传统架构 在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性问题,不能有单点故障,由于注册中心Eureka本身也是一个服务,如果它只有一个节点,那么它有可能发生故障,这样我们

对于其中三篇博客我的感想

读完三篇文章使我想到了很多,同样都是从农村出来的孩子,但是现在的生活和他们那个年代相比简直就是一个天一个地.我们现在的生活待遇远远比他们好的多的多,他们上初中高中年代是艰辛的,我们的是优越的.父母是最疼爱自己的孩子的,他把所有好的东西都给了我们.我上学期间父母把我当宝贝一样宠着,但是他们不管我的学习,学好学坏他们都不管,我初中之前还是比较争气的,成绩都在班里前十名,但是高中之后我就不行了,成绩一落千丈.我是从初三从石家庄回来上高中的,回来之后没人管我,可以说我的学业是我一个人自主的学出来的,对于

Selenium实战(三)——滑动解锁+窗口截图

一.简单滑块的实例 当单机滑块时,改变的只是CSS样式,HTML代码如下: 1 <div class="slide-to-unlock-progress" style="background-color: rgb(255, 233, 127); height: 36px;"></div> 2 <div class="slide-to-unlock-handle" style="background-colo