#include <windows.h> #include <stdint.h> #include <stdio.h> void ShootScreen(
const char* filename, HWND hWnd) { HDC hdc = CreateDC("DISPLAY", NULL, NULL,
NULL); int32_t ScrWidth= 0, ScrHeight = 0; RECT rect = { 0 }; if (hWnd == NULL)
{ ScrWidth= GetDeviceCaps(hdc, HORZRES); ScrHeight = GetDeviceCaps(hdc,
VERTRES); }else { GetWindowRect(hWnd, &rect); ScrWidth = rect.right -
rect.left; ScrHeight= rect.bottom - rect.top; } HDC hmdc =
CreateCompatibleDC(hdc); HBITMAP hBmpScreen= CreateCompatibleBitmap(hdc,
ScrWidth, ScrHeight); HBITMAP holdbmp= (HBITMAP)SelectObject(hmdc, hBmpScreen);
BITMAP bm; GetObject(hBmpScreen,sizeof(bm), &bm); BITMAPINFOHEADER bi = { 0 };
bi.biSize= sizeof(BITMAPINFOHEADER); bi.biWidth = bm.bmWidth; bi.biHeight =
bm.bmHeight; bi.biPlanes= bm.bmPlanes; bi.biBitCount = bm.bmBitsPixel;
bi.biCompression= BI_RGB; bi.biSizeImage = bm.bmHeight * bm.bmWidthBytes;
  // 图片的像素数据 char *buf = new char[bi.biSizeImage]; BitBlt(hmdc, 0, 0,
ScrWidth, ScrHeight, hdc, rect.left, rect.top, SRCCOPY); GetDIBits(hmdc,
hBmpScreen,0L, (DWORD)ScrHeight, buf, (LPBITMAPINFO)&bi,
(DWORD)DIB_RGB_COLORS); BITMAPFILEHEADER bfh= { 0 }; bfh.bfType = ((WORD)('M' <<
8) | 'B'); bfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
bi.biSizeImage; bfh.bfOffBits= sizeof(BITMAPFILEHEADER)+sizeof
(BITMAPINFOHEADER); HANDLE hFile= CreateFile(filename, GENERIC_WRITE, 0, 0,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,0); DWORD dwWrite; WriteFile(hFile, &bfh,
sizeof(BITMAPFILEHEADER), &dwWrite, NULL); WriteFile(hFile, &bi, sizeof
(BITMAPINFOHEADER), &dwWrite, NULL); WriteFile(hFile, buf, bi.biSizeImage, &
dwWrite, NULL); CloseHandle(hFile); hBmpScreen= (HBITMAP)SelectObject(hmdc,
holdbmp); }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信