简单的截屏

#include <windows.h>
#include <atlimage.h>

void	SaveBitmap(char *szFilename,HBITMAP hBitmap)
{
  HDC					hdc=NULL;
  FILE*				fp=NULL;
  LPVOID				pBuf=NULL;
  BITMAPINFO			bmpInfo;
  BITMAPFILEHEADER	bmpFileHeader;

  do{

    hdc=GetDC(NULL);
    ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
    bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
    GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);

    if(bmpInfo.bmiHeader.biSizeImage<=0)
      bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth*abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8;

    if((pBuf=malloc(bmpInfo.bmiHeader.biSizeImage))==NULL)
    {
      MessageBox(NULL,_T("Unable to Allocate Bitmap Memory"),_T("Error"),MB_OK|MB_ICONERROR);
      break;
    }

    bmpInfo.bmiHeader.biCompression=BI_RGB;
    GetDIBits(hdc,hBitmap,0,bmpInfo.bmiHeader.biHeight,pBuf,&bmpInfo,DIB_RGB_COLORS);	

    if((fp=fopen(szFilename,"wb"))==NULL)
    {
      MessageBox(NULL,_T("Unable to Create Bitmap File"),_T("Error"),MB_OK|MB_ICONERROR);
      break;
    }

    bmpFileHeader.bfReserved1=0;
    bmpFileHeader.bfReserved2=0;
    bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage;
    bmpFileHeader.bfType='MB';
    bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);

    fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
    fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
    fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);

  }while(false);

  if(hdc)
    ReleaseDC(NULL,hdc);

  if(pBuf)
    free(pBuf);

  if(fp)
    fclose(fp);
}


void getAppScreenShot(const char *appName, char *saveBmpName)
{ 
  HWND hAppWnd = ::FindWindow(0, appName);
  HDC hAppDC = ::GetDC(hAppWnd);
  RECT rc;
  ::GetClientRect(hAppWnd, &rc);
  int		nWidth = rc.right - rc.left;
  int		nHeight = rc.bottom - rc.top;
  HDC		hBmpFileDC=CreateCompatibleDC(hAppDC);
  HBITMAP	hBmpFileBitmap=CreateCompatibleBitmap(hAppDC,nWidth,nHeight);
  HBITMAP hOldBitmap = (HBITMAP) SelectObject(hBmpFileDC,hBmpFileBitmap);
  BitBlt(hBmpFileDC,0,0,nWidth,nHeight,hAppDC,0,0,SRCCOPY|CAPTUREBLT);
  SelectObject(hBmpFileDC,hOldBitmap);

  SaveBitmap(saveBmpName,hBmpFileBitmap);

  DeleteDC(hBmpFileDC);
  DeleteObject(hBmpFileBitmap);
}


int main()
{
  getAppScreenShot("计算器", "1.bmp");

  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值