游戏截屏

 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);  } 

你可能感兴趣的:(游戏)