Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Help Screen Shot in c
Forum - C/C++ - Help Screen Shot in c

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Come da subject come faccio in c a fare lo screenshot dello schermo? insomma salvare un immagine jpg o bmp dello stato attuale dello schermo? Aiutatemi mi sto scervellando da tempo senza soluzione :d

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:54
Giovedì, 23/03/2006
In C la vedo dura, in C++ invece puoi fare cos?:

Screenshot.h
Codice sorgente - presumibilmente C++

  1. #ifndef SCREENSHOT_H
  2. #define SCREENSHOT_H
  3. #endif
  4.  
  5. /*
  6. Thanks to http://www.geocities.com/krishnapg/bitmap.html#SaveBitmap
  7. */
  8.  
  9. /* Screenshot.h
  10. Il seguente modulo contiene le funzioni per catturare uno screenshot dell'utente
  11. */
  12. void GetScreenBitmap();
  13. void SaveBitmap(char *szFilename,HBITMAP hBitmap);



Screenshot.cpp
Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "Screenshot.h"
  4.  
  5. /* Screenshot.cpp | by PieroTofy 2005 http://www.pierotofy.it |
  6.  
  7. Si veda il file Screenshot.h per l'utilizzo delle funzioni
  8. presenti nel modulo  */
  9.  
  10.  
  11. void GetScreenBitmap(){
  12.         HBITMAP hBitmap;
  13.  
  14.         //Preme il tasto per catturare la schermata negli appunti
  15.         keybd_event(VK_SNAPSHOT,0,0,1);
  16.        
  17.         //E lo rilascia
  18.         keybd_event(VK_SNAPSHOT,0,0,0);
  19.  
  20.         if(OpenClipboard(NULL)){
  21.                 //Prende l'immagine dagli appunti
  22.                 hBitmap=(HBITMAP)GetClipboardData(CF_BITMAP);
  23.  
  24.                 //E la salva
  25.                 SaveBitmap("c:\\~Buffer.bmp",hBitmap);
  26.  
  27.                 //Chiude gli appunti
  28.                 CloseClipboard();
  29.  
  30.                 //TODO: invia i dati
  31.                 //TODO: cancella il file
  32.         }
  33.  
  34. }
  35.  
  36. /*
  37. Funzione per scrivere l'handle di una bitmap su file
  38. Thanks to http://www.geocities.com/krishnapg/bitmap.html#SaveBitmap
  39. */
  40. void SaveBitmap(char *szFilename,HBITMAP hBitmap){
  41.       HDC        hdc=NULL;
  42.       FILE*      fp=NULL;
  43.       LPVOID     pBuf=NULL;
  44.       BITMAPINFO bmpInfo;
  45.       BITMAPFILEHEADER  bmpFileHeader;
  46.       do{
  47.             hdc=GetDC(NULL);
  48.             ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
  49.             bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
  50.             GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);
  51.             if(bmpInfo.bmiHeader.biSizeImage<=0)
  52.             bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth
  53. *abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8;
  54.             if((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL)
  55.             {
  56.                   //MessageBox( NULL, "Unable to Allocate Bitmap Memory", "Error", MB_OK|MB_ICONERROR);
  57.                   break;
  58.             }          
  59.             bmpInfo.bmiHeader.biCompression=BI_RGB;
  60.             GetDIBits(hdc,hBitmap,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS);      
  61.             if((fp = fopen(szFilename,"wb"))==NULL)
  62.             {
  63.                   //MessageBox( NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR);
  64.                   break;
  65.             }
  66.             bmpFileHeader.bfReserved1=0;
  67.             bmpFileHeader.bfReserved2=0;
  68.             bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage;
  69.             bmpFileHeader.bfType='MB';
  70.             bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
  71.             fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
  72.             fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
  73.             fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);
  74.       }while(false);
  75.             if(hdc)     ReleaseDC(NULL,hdc);
  76.             if(pBuf)    free(pBuf);
  77.             if(fp)      fclose(fp);
  78. }



;)

Ultima modifica effettuata da pierotofy il 23/03/2006 alle 22:55


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:46
Giovedì, 23/03/2006
Tempestivo!! e sempre esauriente grazie!! ;)

PM Quote