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