• 截图其它软件


     1 BOOL SaveHwndToBmp( HWND hWnd, LPCTSTR lpszFile )
     2 {
     3     BOOL bRet;
     4     HDC hDC, hMemDC;
     5     HBITMAP hBitmap, hBitmapOld;
     6     RECT rc;
     7     int nWidth, nHeight;
     8     BITMAPINFOHEADER BitmapInfoHeader;
     9     BITMAPFILEHEADER BitmapFileHeader;
    10     HANDLE hFile;
    11     DWORD dwBytes;
    12 
    13 
    14     ::GetWindowRect( hWnd, &rc );
    15     nWidth = rc.right - rc.left;
    16     nHeight = rc.bottom - rc.top;
    17 
    18     memset( &BitmapInfoHeader, 0, sizeof( BITMAPINFOHEADER ) );
    19     BitmapInfoHeader.biSize = sizeof( BITMAPINFOHEADER );
    20     BitmapInfoHeader.biWidth = nWidth;
    21     BitmapInfoHeader.biHeight = nHeight;
    22     BitmapInfoHeader.biPlanes = 1;
    23     BitmapInfoHeader.biBitCount = 24;
    24     BitmapInfoHeader.biCompression = BI_RGB;
    25     BitmapInfoHeader.biSizeImage = ( ( ( nWidth * 24 + 31 ) & ~31 ) >> 3 ) * nHeight;
    26     //BitmapInfoHeader.biXPelsPerMeter = 0;
    27     //BitmapInfoHeader.biYPelsPerMeter = 0;
    28     //BitmapInfoHeader.biClrUsed = 0;
    29     //BitmapInfoHeader.biClrImportant = 0;
    30 
    31 
    32     hDC = ::GetWindowDC( hWnd );
    33     hMemDC = ::CreateCompatibleDC( hDC );
    34     hBitmap = ::CreateCompatibleBitmap( hDC, nWidth, nHeight );
    35     hBitmapOld = ( HBITMAP )::SelectObject( hMemDC, ( HGDIOBJ )hBitmap );
    36 
    37     if ( !::PrintWindow( hWnd, hMemDC, 0 ) )
    38     {
    39         bRet = FALSE;
    40         goto err_exit;
    41     }
    42 
    43     if ( ::GetDIBits( hMemDC, hBitmap, 0, nHeight, ( LPVOID )g_ImgBuff, ( LPBITMAPINFO )&BitmapInfoHeader, DIB_RGB_COLORS ) != nHeight )
    44     {
    45         bRet = FALSE;
    46         goto err_exit;
    47     }
    48 
    49     memset( &BitmapFileHeader, 0, sizeof( BITMAPFILEHEADER ) );
    50     BitmapFileHeader.bfType = 0x4d42;
    51     BitmapFileHeader.bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + BitmapInfoHeader.biSizeImage;
    52     //BitmapFileHeader.bfReserved1 = 0;
    53     //BitmapFileHeader.bfReserved2 = 0;
    54     BitmapFileHeader.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
    55 
    56     hFile = ::CreateFile( lpszFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    57     if ( hFile == INVALID_HANDLE_VALUE )
    58     {
    59         bRet = FALSE;
    60         goto err_exit;
    61     }
    62 
    63     bRet = ::WriteFile( hFile, &BitmapFileHeader, sizeof( BITMAPFILEHEADER ), &dwBytes, NULL );
    64     if ( !bRet || dwBytes != sizeof( BITMAPFILEHEADER ) )
    65     {
    66         ::CloseHandle( hFile );
    67         bRet = FALSE;
    68         goto err_exit;
    69     }
    70 
    71     bRet = ::WriteFile( hFile, &BitmapInfoHeader, sizeof( BITMAPINFOHEADER ), &dwBytes, NULL );
    72     if ( !bRet || dwBytes != sizeof( BITMAPINFOHEADER ) )
    73     {
    74         ::CloseHandle( hFile );
    75         bRet = FALSE;
    76         goto err_exit;
    77     }
    78 
    79     bRet = ::WriteFile( hFile, g_ImgBuff, BitmapInfoHeader.biSizeImage, &dwBytes, NULL );
    80     if ( !bRet || dwBytes != BitmapInfoHeader.biSizeImage )
    81     {
    82         ::CloseHandle( hFile );
    83         bRet = FALSE;
    84         goto err_exit;
    85     }
    86 
    87     ::CloseHandle( hFile );
    88 err_exit:
    89     ::SelectObject( hMemDC, ( HGDIOBJ )hBitmapOld );
    90     ::DeleteObject( ( HGDIOBJ )hBitmap );
    91     ::DeleteDC( hMemDC );
    92     ::ReleaseDC( hWnd, hDC );
    93     return bRet;
    94 }
  • 相关阅读:
    oracle-高级查询
    java-集合框架
    java-String-StringBuffer
    ROS消息, 服务, 主题, 订阅 5
    ROS消息, 服务, 主题, 订阅 4
    ROS消息, 服务, 主题, 订阅 3
    ROS消息, 服务, 主题, 订阅 2
    ROS消息, 服务, 主题, 订阅 1
    可交互的Marker
    RVIZ建Maker
  • 原文地址:https://www.cnblogs.com/javado/p/3477135.html
Copyright © 2020-2023  润新知