zoukankan      html  css  js  c++  java
  • 窗口截图(可指定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.   
    12.     int nWidht = rect.right - rect.left;  
    13.     int nHeight = rect.bottom - rect.top;  
    14.   
    15.     HDC hSrcDC = ::GetWindowDC(hWnd);  
    16.     ASSERT(hSrcDC);  
    17.     HDC hMemDC = ::CreateCompatibleDC(hSrcDC);  
    18.     ASSERT(hMemDC);  
    19.     HBITMAP hBitmap = ::CreateCompatibleBitmap(hSrcDC, nWidht, nHeight);  
    20.     ASSERT(hBitmap);  
    21.     HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap);  
    22.     ::BitBlt(hMemDC, 0, 0, nWidht, nHeight, hSrcDC, 0, 0, SRCCOPY);  
    23.   
    24.     BITMAP bitmap = {0};  
    25.     ::GetObject(hBitmap, sizeof(BITMAP), &bitmap);  
    26.     BITMAPINFOHEADER bi = {0};  
    27.     BITMAPFILEHEADER bf = {0};  
    28.       
    29.     CONST int nBitCount = 24;  
    30.     bi.biSize = sizeof(BITMAPINFOHEADER);  
    31.     bi.biWidth = bitmap.bmWidth;  
    32.     bi.biHeight = bitmap.bmHeight;  
    33.     bi.biPlanes = 1;  
    34.     bi.biBitCount = nBitCount;  
    35.     bi.biCompression = BI_RGB;  
    36.     DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight;  
    37.   
    38.     HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER));  
    39.     LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);  
    40.     *lpbi = bi;  
    41.   
    42.     ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS);  
    43.   
    44.     try  
    45.     {  
    46.         CFile file;  
    47.         file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite);  
    48.         bf.bfType = 0x4d42;  
    49.         dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
    50.         bf.bfSize = dwSize;  
    51.         bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
    52.   
    53.         file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER));  
    54.         file.Write((BYTE*)lpbi, dwSize);  
    55.         file.Close();  
    56.     }  
    57.     catch(CFileException* e)  
    58.     {  
    59.         e->ReportError();  
    60.         e->Delete();  
    61.     }  
    62.       
    63.     GlobalUnlock(hDib);  
    64.     GlobalFree(hDib);  
    65.       
    66.     ::SelectObject(hMemDC, hOldBitmap);  
    67.     ::DeleteObject(hBitmap);  
    68.     ::DeleteDC(hMemDC);  
    69.     ::ReleaseDC(hWnd, hSrcDC);  
    70.   
    71.     return TRUE;  
    72. }  
    73.   
    74. // 调用方法  
    75. HWND hWnd = ::FindWindow(NULL, _T("XXX"));     
    76. if(hWnd)     
    77. {     
    78.    SaveHwndToBmpFile(hWnd, _T("F://12.bmp"));     
    79. }   

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

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

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

  • 相关阅读:
    Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]
    openstack里面的Provider network 和 Tenant network 的区别
    Openstack网络相关概念比较复杂,经常使人混淆,本文进行相关说明。
    OpenStack 网络:Neutron 初探
    openstack 网络架构 nova-network + neutron
    Java 性能测试的四项原则
    微信公众号开发之微信买单
    微信公众号开发之如何使用JSSDK
    微信公众号开发之如何一键导出微信所有用户信息到Excel
    [内核驱动] 链表LIST_ENTRY的操作(转)
  • 原文地址:https://www.cnblogs.com/findumars/p/6005823.html
Copyright © 2011-2022 走看看