void
CaptureScreen()
... {
//获得屏幕宽度
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
//获得屏幕高度
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
//获得桌面窗口句柄
HWND hDesktopWnd = GetDesktopWindow();
//获得桌面窗口设备环境
HDC hDesktopDC = GetDC(hDesktopWnd);
//产生全屏幕窗口设备描述表的兼容设备环境
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
//产生全屏幕窗口设备描述表的兼容位图
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
//将兼容位图选入兼容设备环境
SelectObject(hCaptureDC,hCaptureBitmap);
//将全屏幕窗口位图的象素数据拷贝到兼容设备描述表
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
BITMAPINFO bi;
void *pBits=NULL;
ZeroMemory(&bi,sizeof(bi));
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biHeight=nScreenHeight;
bi.bmiHeader.biWidth=nScreenWidth;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=3*nScreenHeight*nScreenWidth;
//产生位图兼容设备描述表
HDC hBmpFileDC=CreateCompatibleDC(hDesktopDC);
//产生位图兼容位图
HBITMAP hBmpFileBitmap=CreateDIBSection(hDesktopDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
//将兼容位图选入兼设备描述表容设备描述表
SelectObject(hBmpFileDC,hBmpFileBitmap);
//将捕获的位图的象素拷贝到位图设备环境
BitBlt(hBmpFileDC,0,0,nScreenWidth,nScreenHeight,hCaptureDC,0,0,SRCCOPY);
//创建文件
HANDLE hFile=CreateFile("111.bmp",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//保存位图文件
if(hFile!=INVALID_HANDLE_VALUE)
...{
DWORD dwRet=0;
BITMAPFILEHEADER bmfHeader;
ZeroMemory(&bmfHeader,sizeof(bmfHeader));
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
bmfHeader.bfType='MB';
//写入位图信息头
WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
//写入位图尺寸颜色表等信息
WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
//写入位图数据块
WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
CloseHandle(hFile);
}
DeleteDC(hBmpFileDC);
DeleteObject(hBmpFileBitmap);
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
}
... {
//获得屏幕宽度
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
//获得屏幕高度
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
//获得桌面窗口句柄
HWND hDesktopWnd = GetDesktopWindow();
//获得桌面窗口设备环境
HDC hDesktopDC = GetDC(hDesktopWnd);
//产生全屏幕窗口设备描述表的兼容设备环境
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
//产生全屏幕窗口设备描述表的兼容位图
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
//将兼容位图选入兼容设备环境
SelectObject(hCaptureDC,hCaptureBitmap);
//将全屏幕窗口位图的象素数据拷贝到兼容设备描述表
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
BITMAPINFO bi;
void *pBits=NULL;
ZeroMemory(&bi,sizeof(bi));
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biHeight=nScreenHeight;
bi.bmiHeader.biWidth=nScreenWidth;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=3*nScreenHeight*nScreenWidth;
//产生位图兼容设备描述表
HDC hBmpFileDC=CreateCompatibleDC(hDesktopDC);
//产生位图兼容位图
HBITMAP hBmpFileBitmap=CreateDIBSection(hDesktopDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
//将兼容位图选入兼设备描述表容设备描述表
SelectObject(hBmpFileDC,hBmpFileBitmap);
//将捕获的位图的象素拷贝到位图设备环境
BitBlt(hBmpFileDC,0,0,nScreenWidth,nScreenHeight,hCaptureDC,0,0,SRCCOPY);
//创建文件
HANDLE hFile=CreateFile("111.bmp",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//保存位图文件
if(hFile!=INVALID_HANDLE_VALUE)
...{
DWORD dwRet=0;
BITMAPFILEHEADER bmfHeader;
ZeroMemory(&bmfHeader,sizeof(bmfHeader));
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
bmfHeader.bfType='MB';
//写入位图信息头
WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
//写入位图尺寸颜色表等信息
WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
//写入位图数据块
WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
CloseHandle(hFile);
}
DeleteDC(hBmpFileDC);
DeleteObject(hBmpFileBitmap);
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
}