自己写远程控制软件之捕捉屏幕

来源:互联网 发布:淘宝透明内衣买家晒图 编辑:程序博客网 时间:2024/04/29 08:41
函数说明:
        为保证图像质量,用 24 位位图,后面再说如何压缩成 JPG

函数如下:
void CaptureScreen(PCHAR lpBuffer, DWORD dwLength, DWORD dwWidth, DWORD dwHeight, DWORD &dwBitmapSize);

lpBuffer 存储以下信息:
BITMAPFILEHEADER
BITMAPINFOHEADER
RGB 数据

void CaptureScreen(PCHAR lpBuffer, DWORD dwLength, DWORD dwWidth, DWORD dwHeight, DWORD &dwBitmapSize){dwBitmapSize = 0;HWND hDesktopWnd= ::GetDesktopWindow();HDC hDesktopDC= ::GetDC(hDesktopWnd);HDC hCaptureDC= ::CreateCompatibleDC(hDesktopDC);HBITMAP hBitmap = ::CreateCompatibleBitmap(hDesktopDC, dwWidth, dwHeight);LPBITMAPFILEHEADER pFileHeader= (LPBITMAPFILEHEADER) lpBuffer;LPBITMAPINFO pBitmapInfo = (LPBITMAPINFO) (lpBuffer + sizeof(BITMAPFILEHEADER));::SelectObject(hCaptureDC, hBitmap);::BitBlt(hCaptureDC, 0, 0, dwWidth, dwHeight, hDesktopDC, 0, 0, SRCCOPY);BITMAP bmpBit = { 0 };::GetObject(hBitmap, sizeof(BITMAP), &bmpBit);pBitmapInfo->bmiHeader.biSize= sizeof(BITMAPINFOHEADER);pBitmapInfo->bmiHeader.biWidth= bmpBit.bmWidth;pBitmapInfo->bmiHeader.biHeight= bmpBit.bmHeight;pBitmapInfo->bmiHeader.biPlanes= 1;pBitmapInfo->bmiHeader.biBitCount= 24;pBitmapInfo->bmiHeader.biCompression= 0;pBitmapInfo->bmiHeader.biSizeImage= bmpBit.bmWidthBytes * bmpBit.bmHeight;pBitmapInfo->bmiHeader.biXPelsPerMeter= 0;pBitmapInfo->bmiHeader.biYPelsPerMeter= 0;pBitmapInfo->bmiHeader.biClrUsed= 0;pBitmapInfo->bmiHeader.biClrImportant= 0;pFileHeader->bfType= 0x4D42;pFileHeader->bfOffBits= sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);pFileHeader->bfSize= pBitmapInfo->bmiHeader.biSizeImage + pFileHeader->bfOffBits;pFileHeader->bfReserved1= 0;pFileHeader->bfReserved2= 0;PCHAR pBmpData = lpBuffer + sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);::GetDIBits(hCaptureDC, hBitmap, 0, bmpBit.bmHeight, pBmpData, pBitmapInfo, DIB_RGB_COLORS);::ReleaseDC(hDesktopWnd, hDesktopDC);::DeleteDC(hCaptureDC);::DeleteObject(hBitmap);dwBitmapSize = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER) + pBitmapInfo->bmiHeader.biSizeImage;}


原创粉丝点击