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

函数说明:
        为保证图像质量,用 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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSDN是一家全球性的综合技术社区,提供丰富的IT技术资源和服务,旨在推动中国的IT产业发展。远程控制软件是CSDN中的一个重要组成部分。 远程控制软件是一种可以通过网络连接来远程管理和控制其他计算机的工具。利用这种软件,用户可以远程访问其他计算机,并在远程控制台上执行各种操作,如文件传输、远程协助远程维护等。远程控制软件在信息技术领域扮演着重要角色,广泛应用于技术支持、远程教育、远程办公等领域。 CSDN提供了一系列优秀的远程控制软件,为用户提供便捷的远程管理体验。这些软件具有易于使用、安全可靠、功能强大等特点,能够满足用户在远程控制过程中的各种需求。此外,CSDN还提供了详细的使用指南和技术支持,帮助用户更好地了解和运用远程控制软件远程控制软件的使用有许多好处。首先,它可以节省用户的时间和精力,不需要亲自到现场才能进行操作和维护。其次,远程控制软件可以方便地进行远程协作和技术支持,加强了团队合作和提高了工作效率。第三,远程控制软件提供了安全可靠的连接方式,保护用户的数据和隐私。 总而言之,远程控制软件是CSDN提供的重要工具之一,它帮助用户实现远程管理和控制其他计算机,提高了工作效率和便利性。CSDN将继续提供优质的远程控制软件和技术支持,为广大用户提供更好的远程控制体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值