Comment lire les pixels de l'écran?

Je veux lire une zone rectangulaire, ou à l'ensemble des pixels de l'écran. Comme si la capture d'écran bouton a été pressé.

Comment je le faire?

Edit: code du Travail:

void CaptureScreen(char *filename)
{
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|CAPTUREBLT); 
BITMAPINFO bmi = {0}; 
bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); 
bmi.bmiHeader.biWidth = nScreenWidth; 
bmi.bmiHeader.biHeight = nScreenHeight; 
bmi.bmiHeader.biPlanes = 1; 
bmi.bmiHeader.biBitCount = 32; 
bmi.bmiHeader.biCompression = BI_RGB; 
RGBQUAD *pPixels = new RGBQUAD[nScreenWidth * nScreenHeight]; 
GetDIBits(
hCaptureDC, 
hCaptureBitmap, 
0,  
nScreenHeight,  
pPixels, 
&bmi,  
DIB_RGB_COLORS
);  
//write:
int p;
int x, y;
FILE *fp = fopen(filename, "wb");
for(y = 0; y < nScreenHeight; y++){
for(x = 0; x < nScreenWidth; x++){
p = (nScreenHeight-y-1)*nScreenWidth+x; //upside down
unsigned char r = pPixels[p].rgbRed;
unsigned char g = pPixels[p].rgbGreen;
unsigned char b = pPixels[p].rgbBlue;
fwrite(fp, &r, 1);
fwrite(fp, &g, 1);
fwrite(fp, &b, 1);
}
}
fclose(fp);
delete [] pPixels; 
ReleaseDC(hDesktopWnd, hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
}
N'oubliez pas d'accepter les réponses, si elles vous aider.
Je sais, je n'ai pas eu ce travail encore
Vous devrez peut-être ajouter un peu plus d'informations telles que ce que vous avez essayé et ce qui est défectueux.
Ce qui inclut / compilateur, etc avez-vous utilisé?

OriginalL'auteur Newbie | 2010-04-17