Example to Save Screen in File
FUNCTIONS:
// Get CLSID
int GetEncoderClsid(const WCHAR * format, CLSID * pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
IMAGECODECINFO *pImageCodecInfo = NULL;
GdipGetImageEncodersSize(&num, &size);
if (size == 0)
return -1; // Failure
pImageCodecInfo = malloc(size);
if (pImageCodecInfo == NULL)
return -1; // Failure
GdipGetImageEncoders(num, size, pImageCodecInfo);
for (UINT j = 0; j < num; ++j)
{
if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
PUT THIS CODE IN A BUTTON OR IN SOME PART OF YOUR PROGRAM
ULONG_PTR gdiplusToken;
char snom[MAX_PATH ];
WCHAR sficnom[MAX_PATH ];
char sdir[MAX_PATH ];
// INIT GDI
GdiplusStartup(&gdiplusToken, &g_GdiplusStartupInput, NULL);
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);
ENCODERPARAMETERS encoderParameters;
ULONG quality;
HWND hw;
HDC hDCSrc, hDCMemory;
HBITMAP hBmp, hBmpPrev;
long t;
SYSTEMTIME st;
//GpStatus lRes;
// COPY SCREEN TO BITMAP
hw = GetDesktopWindow();
hDCSrc = GetWindowDC(hw);
hDCMemory = CreateCompatibleDC(hDCSrc);
hBmp = CreateCompatibleBitmap(hDCSrc, GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN));
hBmpPrev = SelectObject(hDCMemory, hBmp);
BitBlt(hDCMemory, 0, 0, GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN), hDCSrc, 0, 0, SRCCOPY);
hBmp = SelectObject(hDCMemory, hBmpPrev);
DeleteDC(hDCMemory);
ReleaseDC(hw, hDCSrc);
// COPY BITMAP TO GDI BITMAP
GdipCreateBitmapFromHBITMAP(hBmp, 0, (GP_GPBITMAP** ) &t);
DeleteObject (hBmp);
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = eEncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
// Save the image as a JPEG with quality level 100.
quality = 100;
encoderParameters.Parameter[0].Value = &quality;
// GET CURRENT DATE TIME
GetSystemTime( &st );
// GET ACTIVE DIRECTORY
GetCurrentDirectory( MAX_PATH, (LPTSTR) sdir);
// CREATE FILE NAME WITH CURRENT DATE TIME
wsprintf( snom, "%s\\P%4.4d%02.2d%02.2d%02.2d%02.2d%3.3d.jpg", sdir,st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond );
// CONVERT TO WIDE THE NAME
MultiByteToWideChar(CP_OEMCP,MB_COMPOSITE, snom, lstrlen(snom), sficnom, MAX_PATH);
// SAVE IMAGE TO FILE
GdipSaveImageToFile( (GP_GPIMAGE *) t, sficnom, &encoderClsid, &encoderParameters);
// CLOSE GDI.
GdipDisposeImage ( (GP_GPIMAGE *) t );
GdiplusShutdown(gdiplusToken);
I Hope to be useful.
LUCINDO MORA.
E-MAIL: NOSPAM_lucindom@gmail.com