656315106 656315106
没有留下任何文字
关注数: 74 粉丝数: 509 发帖数: 11,518 关注贴吧数: 5
windows编程一个截屏函数 直接传入要保存的文件路径 这样调用即可截屏保存至文件,试验版本没有错误检查 _ScreenshotToFile(TEXT("11.bmp")); VOID _ScreenshotToFile(LPTSTR lpFileName) { DWORD iDeskWidth = GetSystemMetrics(SM_CXSCREEN); DWORD iDeskHeight = GetSystemMetrics(SM_CYSCREEN); HDC hdcMem = CreateCompatibleDC(0); HDC hdcdesk = GetDC(0); HBITMAP bitmap = CreateCompatibleBitmap(hdcdesk, iDeskWidth, iDeskHeight); SelectObject(hdcMem, bitmap); BitBlt(hdcMem, 0, 0, iDeskWidth, iDeskHeight, hdcdesk, 0, 0, SRCCOPY); DeleteDC(hdcMem); BITMAPFILEHEADER bmfHdr; //位图属性结构 BITMAPINFOHEADER bi; //位图文件头结构 memset(&bi, 0, sizeof(BITMAPINFOHEADER)); bi.biSize = sizeof(BITMAPINFOHEADER);//固定 bi.biWidth = iDeskWidth; //位图宽 bi.biHeight = iDeskHeight;//位图高 bi.biPlanes = 1; //固定 bi.biBitCount = 24;//每个像素位数 此处24位真彩 DWORD dwBmBitsSize = ((iDeskWidth * 24 + 31) / 32) * 4 * iDeskHeight; HANDLE lpbi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBmBitsSize + sizeof(BITMAPINFOHEADER)); *(LPBITMAPINFOHEADER)lpbi = bi; GetDIBits(GetDC(0), bitmap, 0, iDeskHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER), (LPBITMAPINFO)&bi, DIB_RGB_COLORS); HANDLE fh = CreateFile(lpFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); //位图文件头 bmfHdr.bfType = 0x4D42; // "BM" bmfHdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBmBitsSize;//!! bmfHdr.bfReserved1 = 0; bmfHdr.bfReserved2 = 0; bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER); DWORD dwWriten; WriteFile(fh, &bmfHdr, sizeof(BITMAPFILEHEADER), &dwWriten, NULL); WriteFile(fh, lpbi, sizeof(BITMAPINFOHEADER) + dwBmBitsSize, &dwWriten, NULL); HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, lpbi); CloseHandle(fh); }
1 下一页