F
ich würde gerne einen screenshot vom desktop machen, die daten sollen dann als bitmap in nem byte array vorliegen. hab auch was schönes gecodet :
class cDesktop{
private:
HDC DesktopDC;
HBITMAP DesktopBitmap;
HDC HolderDC;
public:
int GetDesktopBitmap();
cDesktop();
};
cDesktop::cDesktop()
{
//TODO: Hier Ihren Quelltext einfügen
HolderDC=::GetDC(GetDesktopWindow());
DesktopDC=CreateCompatibleDC(HolderDC);
DesktopBitmap=CreateCompatibleBitmap(HolderDC,
GetDeviceCaps(HolderDC,HORZRES),
GetDeviceCaps(HolderDC,VERTRES));
SelectObject(DesktopDC,DesktopBitmap);
}
int cDesktop::GetDesktopBitmap(){
RECT r;
GetWindowRect(GetDesktopWindow(),&r);
BitBlt(DesktopDC,r.left,r.top,r.right,r.bottom,
HolderDC,r.left,r.top,SRCCOPY);
// BITMAPINFO bla;
struct _BMInfo {
BOOL truecolour;
BITMAPINFO bmi;
// Colormap info - comes straight after BITMAPINFO - **HACK**
RGBQUAD cmap[256];
} m_bminfo;
/* memset(bla,0,sizeof(bla));
bla.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bla.bmiHeader.biBitCount=0; */
memset(&m_bminfo, 0, sizeof(m_bminfo));
m_bminfo.bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bminfo.bmi.bmiHeader.biBitCount = 0;
BYTE *buffer;
GetDIBits(DesktopDC,DesktopBitmap,r.top,r.bottom,&buffer,&m_bminfo.bmi,DIB_RGB_COLORS);
xxxBMP_Speichern(buffer,r.right,r.bottom,"temp.bmp");
return 0;
}
so,leider funkzt das ganze nicht, buffer bleibt leer. ich muss zugeben,dass ich nicht ganz sicher bin was ich da genau gemacht hab,hatte mir ein leider zu komplexes beispielprog rausgesucht und versucht das ganze nach zu ahmen.