#include <windows.h>
#include <string.h>
#include <iostream>
using namespace std;
class CStellwerk
{
private:
HWND m_hDesktop;
public:
void MakeScreenshot(char SavePath[]);
void SaveScreen(HWND pScreen, char Path[])
{
HDC hdcScreen;
HBITMAP hbmScreen;
//---------------Bitmap Informationen
BITMAPINFO infobmp;
infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
infobmp.bmiHeader.biWidth = 1024;
infobmp.bmiHeader.biHeight = 768;
infobmp.bmiHeader.biPlanes = 1;
infobmp.bmiHeader.biBitCount = 24;
infobmp.bmiHeader.biCompression = 0;
infobmp.bmiHeader.biSizeImage = 0;
infobmp.bmiHeader.biXPelsPerMeter = 0;
infobmp.bmiHeader.biYPelsPerMeter = 0;
infobmp.bmiHeader.biClrUsed = 0;
infobmp.bmiHeader.biClrImportant = 0;
int* bitmap = new int[1024*768*3];
BITMAPFILEHEADER bfheader;
bfheader.bfType = 19778;
bfheader.bfSize = sizeof(BITMAPFILEHEADER) + 1024*768*3 + sizeof(BITMAPINFOHEADER);
bfheader.bfReserved1 = 0;
bfheader.bfReserved2 = 0;
bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//Bitmap ----------------------- Informationen
hdcScreen = GetWindowDC(pScreen);
hbmScreen = CreateCompatibleBitmap(hdcScreen,1024,768);
// temporärer DC
HDC hdcTemp = CreateCompatibleDC( hdcScreen );
// Bitmap reinselektieren
HBITMAP hbmOld = (HBITMAP)SelectObject( hdcTemp, hbmScreen );
// Inhalt von Desktop übertragen
BitBlt( hdcTemp, 0, 0, 1024, 768, hdcScreen, 0, 0, SRCCOPY );
int iResult = GetDIBits(hdcTemp,hbmScreen,0,768,bitmap,&infobmp,DIB_RGB_COLORS);
// aufräumen
SelectObject( hdcTemp, hbmOld );
DeleteObject( hbmScreen );
DeleteDC( hdcTemp );
HANDLE hfile = CreateFile( Path,GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0);
//Datei Schreiben
DWORD word;
WriteFile(hfile,&bfheader,14,&word,NULL);
WriteFile(hfile,&infobmp,40,&word,NULL);
WriteFile(hfile,bitmap,1024*768*3,&word,NULL);
ReleaseDC(pScreen,hdcScreen);
CloseHandle(hfile);
delete[] bitmap;
}