后台截屏

本文介绍了一种通过调用Windows API实现的获取指定窗口位图的方法。该方法使用了PrintWindow函数来捕获窗口内容,并利用DC(设备上下文)进行位图的创建与选择,最终返回捕获到的位图句柄。此外还展示了如何将位图绘制到桌面窗口。
HBITMAP GetWindowBitmap(HWND hWnd)  
{  
	typedef BOOL ( __stdcall *pPrintWindow )(HWND ,HDC ,UINT );  
    RECT rect;   
	HMODULE h;  
	h = LoadLibrary( "user32.dll" );  
	pPrintWindow p;  
	if( h )  
	{  
		p = ( pPrintWindow )::GetProcAddress( h, "PrintWindow" );  
	}  
	
    ::GetWindowRect(hWnd,&rect);  
	
    HDC hScrDC=::GetDC(hWnd);                            //创建屏幕DC  
    HDC hMemDC=CreateCompatibleDC(hScrDC);                //创建内存DC  
    HBITMAP bitmap=::CreateCompatibleBitmap(hScrDC,rect.right-rect.left,rect.bottom-rect.top); //创建兼容位图  
    HBITMAP OldBitmap=(HBITMAP)::SelectObject(hMemDC,bitmap);    //把位图选进内存DC  
	
    p(hWnd,hMemDC,0);    
	
	HDC d;  
	HWND hw;  
	hw = ::GetDesktopWindow();  
	d = ::GetWindowDC( hw );  
	::BitBlt( d, 0, 0, 200, 200, hMemDC, 0, 0, SRCCOPY );  
	
    ::SelectObject(hMemDC,OldBitmap);   
	
    ::DeleteDC(hMemDC) ;            //删除内存DC  
    ::ReleaseDC(NULL,hScrDC) ;    //释放屏幕DC  
	
    return bitmap;  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值