Jump to content
Maximus

C++ screen shot

Recommended Posts

Am codul :

#include <windows.h>
#include <stdio.h>
#include <gdiplus.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <iostream>

using namespace std;
using namespace Gdiplus;


int GetEncoderClsid(WCHAR *format, CLSID *pClsid)
{
unsigned int num = 0, size = 0;
GetImageEncodersSize(&num, &size);
if(size == 0) return -1;
ImageCodecInfo *pImageCodecInfo = (ImageCodecInfo *)(malloc(size));
if(pImageCodecInfo == NULL) return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(unsigned int j = 0; j < num; ++j){
if(wcscmp(pImageCodecInfo[j].MimeType, format) == 0){
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}

int GetScreeny(LPWSTR lpszFilename, ULONG uQuality) // by Napalm
{
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
HDC hdcCapture = CreateCompatibleDC(hdcScreen);
int nWidth = GetDeviceCaps(hdcScreen, HORZRES),
nHeight = GetDeviceCaps(hdcScreen, VERTRES),
nBPP = GetDeviceCaps(hdcScreen, BITSPIXEL);

LPBYTE lpCapture;
BITMAPINFO bmiCapture = { {
sizeof(BITMAPINFOHEADER), nWidth, -nHeight, 1, nBPP, BI_RGB, 0, 0, 0, 0, 0,
} };
HBITMAP hbmCapture = CreateDIBSection(hdcScreen, &bmiCapture,
DIB_PAL_COLORS, (LPVOID *)&lpCapture, NULL, 0);
if(!hbmCapture){
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);
GdiplusShutdown(gdiplusToken);
return 1;
}

int nCapture = SaveDC(hdcCapture);
SelectObject(hdcCapture, hbmCapture);
BitBlt(hdcCapture, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY);
RestoreDC(hdcCapture, nCapture);
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);

CLSID imageCLSID;
Bitmap *pScreenShot = new Bitmap(hbmCapture, (HPALETTE)NULL);
EncoderParameters encoderParams;
encoderParams.Count = 1;
encoderParams.Parameter[0].NumberOfValues = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams.Parameter[0].Value = &uQuality;
GetEncoderClsid(L"image/jpeg", &imageCLSID);
int result = (pScreenShot->Save(lpszFilename, &imageCLSID, &encoderParams) == Ok);
delete pScreenShot;
DeleteObject(hbmCapture);
GdiplusShutdown(gdiplusToken);
return result;
}

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{
// for (int count = 26; count > -1; count -= 2)
// {
return GetScreeny(L"screeny.jpg", 75);
// }
}

nu reusesc sa il fac sa faca screen la intervale de 10 min... nonstop pana dau kill la proces.

Va rog frumos sa ma ajutati. Multumesc frumos.

Link to comment
Share on other sites

@cifratorul ; am incercat asa :


for (int count = 26; count > -1; count -= 2)
{
Sleep(19000);
return GetScreeny(L"screeny.jpg", 75);
}

pe langa alte variante.. si nu a mers.ce e drept, nu sun PRO, iar codul nu e facut de mine, e luat de pe google

@noVaLue ; sa inteleg ca nu am ce sa ai fac?

Edited by Maximus
Link to comment
Share on other sites

Vezi daca poti compila...

#pragma comment(lib, "GdiPlus.lib")

#include <windows.h>
#include <iostream>
#include <gdiplus.h>
#include <time.h>

using namespace std;
using namespace Gdiplus;

struct timer {
long tStart, tTime, tStamp;
bool tAlive;
};

int GetEncoderClsid(WCHAR *format, CLSID *pClsid) {
unsigned int num = 0, size = 0;
GetImageEncodersSize(&num, &size);
if(size == 0) return -1;
ImageCodecInfo *pImageCodecInfo = (ImageCodecInfo *)(malloc(size));
if(pImageCodecInfo == NULL) return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(unsigned int j = 0; j < num; ++j){
if(wcscmp(pImageCodecInfo[j].MimeType, format) == 0){
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}

int GetScreeny(LPWSTR lpszFilename, ULONG uQuality) // by Napalm
{
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
HDC hdcCapture = CreateCompatibleDC(hdcScreen);
int nWidth = GetDeviceCaps(hdcScreen, HORZRES),
nHeight = GetDeviceCaps(hdcScreen, VERTRES),
nBPP = GetDeviceCaps(hdcScreen, BITSPIXEL);

LPBYTE lpCapture;
BITMAPINFO bmiCapture = { {
sizeof(BITMAPINFOHEADER), nWidth, -nHeight, 1, nBPP, BI_RGB, 0, 0, 0, 0, 0,
} };
HBITMAP hbmCapture = CreateDIBSection(hdcScreen, &bmiCapture,
DIB_PAL_COLORS, (LPVOID *)&lpCapture, NULL, 0);
if(!hbmCapture){
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);
GdiplusShutdown(gdiplusToken);
return 1;
}

int nCapture = SaveDC(hdcCapture);
SelectObject(hdcCapture, hbmCapture);
BitBlt(hdcCapture, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY);
RestoreDC(hdcCapture, nCapture);
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);

CLSID imageCLSID;
Bitmap *pScreenShot = new Bitmap(hbmCapture, (HPALETTE)NULL);
EncoderParameters encoderParams;
encoderParams.Count = 1;
encoderParams.Parameter[0].NumberOfValues = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams.Parameter[0].Value = &uQuality;
GetEncoderClsid(L"image/jpeg", &imageCLSID);
int result = (pScreenShot->Save(lpszFilename, &imageCLSID, &encoderParams) == Ok);
delete pScreenShot;
DeleteObject(hbmCapture);
GdiplusShutdown(gdiplusToken);
return result;
}

bool pathExists(char *g_Path) {
return GetFileAttributes(g_Path) != INVALID_FILE_ATTRIBUTES;
}

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) {
char pathTF[128], pathTB[48], pathTBC[64];
wchar_t chToWCh[128];

int nextImg = 0;

timer CLK;

ZeroMemory(&pathTBC, sizeof(pathTBC));
ZeroMemory(&pathTB, sizeof(pathTB));
ZeroMemory(&pathTF, sizeof(pathTF));

GetCurrentDirectory(sizeof(pathTB), pathTB);

sprintf_s(pathTBC, sizeof(pathTBC), "%s/scr", pathTB);

if(!pathExists((char*)pathTBC))
CreateDirectory((char*)pathTBC, NULL);

CLK.tStart = clock();
CLK.tStamp = 0;
CLK.tAlive = true;

while(CLK.tAlive) {
CLK.tTime = clock() - CLK.tStart;

if(CLK.tTime > CLK.tStamp) {
sprintf_s(pathTF, sizeof(pathTF), "%s/screeny%d.jpg", pathTBC, nextImg);

while(pathExists((char*)pathTF)) {
nextImg++;
sprintf_s(pathTF, sizeof(pathTF), "%s/screeny%d.jpg", pathTBC, nextImg);
}

size_t newSize = strlen(pathTF) + 1;
size_t noConvChars = 0;
mbstowcs_s(&noConvChars, chToWCh, newSize, pathTF, _TRUNCATE);

GetScreeny((LPWSTR)chToWCh, 75);

CLK.tStamp += 10*60*1000;
}
Sleep(100);
}

return 0;
}

Edited by noVaLue
  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...