Maximus Posted March 26, 2012 Report Posted March 26, 2012 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. Quote
cifratorul Posted March 26, 2012 Report Posted March 26, 2012 pai si cum ai incercat? ai pus si tu un timer ceva sa apelezi functia la un anumit interval? Quote
Maximus Posted March 26, 2012 Author Report Posted March 26, 2012 (edited) @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 March 26, 2012 by Maximus Quote
noVaLue Posted March 26, 2012 Report Posted March 26, 2012 Din moment ce un return se executa in functia main (WINAPI) programul se opreste, pentru ca el considera executarea completa a blocului de informatii, si intoarce un raspuns. Quote
phreak Posted March 26, 2012 Report Posted March 26, 2012 spide iti sugerez cu caldura sa termini macar un tutorial de C sau C++ inainte sa te apuci de astfel de proiecte.Iti recomand Learn C++ Quote
Maximus Posted March 26, 2012 Author Report Posted March 26, 2012 @phreak ; mersi. Vroiam doar sa il las in lege sa faca print din cand in cand ... oricum multumesc de ajutor. Quote
noVaLue Posted March 26, 2012 Report Posted March 26, 2012 (edited) 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 March 26, 2012 by noVaLue 1 Quote
phreak Posted March 26, 2012 Report Posted March 26, 2012 te-ai chinuit aiurea cu timeru ala cand puteai foarte frumos sa dai Sleep(1000 * 60 * 10) Quote
noVaLue Posted March 26, 2012 Report Posted March 26, 2012 I-am dat o idee despre timer, cum ar putea sa il foloseasca, poate vrea sa faca ceva mai complex stiu ca nu ajuta la nimic in proiect, de aceea i-am facut o structura. Quote