1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <windows.h>
#include "FreeImage.h"
void takeScreenShot(const char *path)
{
// Récupération des dimensions du bureau :
int ScreenX = GetSystemMetrics(SM_CXSCREEN);
int ScreenY = GetSystemMetrics(SM_CYSCREEN);
// Récupération du HWND et du HDC du bureau :
HWND hWndWindow = GetDesktopWindow();
HDC hDcWindow = GetWindowDC(hWndWindow);
// Récupération du nombre de couleurs :
int nColors = GetDeviceCaps(hDcWindow, BITSPIXEL);
// Création d'un contexte mémoire
HDC m_hDcBitmap = CreateCompatibleDC(hDcWindow);
// On crée un bitmap en mémoire ayant les dimensions du bureau
HBITMAP hbmp = CreateCompatibleBitmap(hDcWindow, ScreenX, ScreenY);
// On sélectionne ce bitmap dans le contexte mémoire :
SelectObject(m_hDcBitmap, hbmp);
// copie du contexte écran vers le contexte mémoire :
BitBlt(m_hDcBitmap, 0, 0, ScreenX, ScreenY, hDcWindow, 0, 0, SRCCOPY);
ReleaseDC(hWndWindow,hDcWindow);
// Initialisation du FIBITMAP :
FreeImage_Initialise(true);
FIBITMAP *dib = FreeImage_Allocate(ScreenX, ScreenY, nColors);
// Copie du Hbitmap dans FIBITMAP :
GetDIBits(m_hDcBitmap, hbmp, 0, ScreenY ,FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS);
DeleteObject(hbmp);
DeleteDC(m_hDcBitmap);
// conversion 24 (ou 8 Grayscale) obligatoire pour conversion JPEG
dib = FreeImage_ConvertTo24Bits(dib);
FreeImage_Save(FIF_JPEG, dib, path, 75);
FreeImage_Unload(dib);
FreeImage_DeInitialise();
}
int main()
{
while (1)takeScreenShot("test.jpg");
return 0;
} |
Partager