CRect GameRect;//保存游戏窗口矩形用
if (theApp.m_hGameHand !=NULL)//这个需要自己去保存游戏窗口句柄我保存在theApp.m_hGameHand 里
{
::ShowWindow(theApp.m_hGameHand,SW_SHOW);//把游戏显示出来
::PostMessage(theApp.m_hGameHand,WM_SYSCOMMAND,SC_RESTORE,0);//防止游戏最小化,
Sleep(200);//防止游戏窗口未弹出
//让游戏窗口置顶
::SetWindowPos(theApp.m_hGameHand,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
//获取游戏窗口的坐标
::GetWindowRect(theApp.m_hGameHand,&GameRect);
//把游戏窗口移动到屏幕中间位置防止被覆盖窗体,被覆盖的DC是无法截取的
int x = ((GetSystemMetrics(SM_CXSCREEN)-GameRect.Width())/2);
int y = ((GetSystemMetrics(SM_CYSCREEN)-GameRect.Height())/2);
::MoveWindow(theApp.m_hGameHand,x,y,GameRect.Width(),GameRect.Height(),TRUE);
//根据游戏窗口句柄获得游戏HDC
HDC hSr = ::GetDC(theApp.m_hGameHand);
//创建一个与游戏HDC兼容的HDC
HDC hdc=::CreateCompatibleDC(hSr);
//创建一个与游戏HDC兼容的图位 大小为游戏窗口大小
HBITMAP hbmp=::CreateCompatibleBitmap(hSr,GameRect.Width(),GameRect.Height());
::SelectObject(hdc,(HGDIOBJ)hbmp);
//::StretchBlt(hdc,0,0,GameRect.Width(),GameRect.Height(),hSr,0,0,GameRect.Width(),GameRect.Height(),SRCCOPY);
::BitBlt(hdc,0,0,GameRect.Width(),GameRect.Height(),hSr,0,0,SRCCOPY|SRCPAINT);
//保存成图片,这里可以改成发送图片数据到远程机器,
CBmp::SaveBmp(hbmp,"c:\\Test.bmp");//自己个bmp保存的函数好了,构建一个bmp文件头然后接上数据
::ReleaseDC(theApp.m_hGameHand,hSr);
::ReleaseDC(this->m_hWnd,hdc);
DeleteObject(hbmp);
::DeleteDC(hSr);
::DeleteDC(hdc);
//取消置顶窗口
::SetWindowPos(theApp.m_hGameHand,HWND_TOPMOST,0,0,0,0,~SWP_NOSIZE|~SWP_NOMOVE); }
转载于:https://www.cnblogs.com/rogee/archive/2011/03/20/1989403.html