23/03/06 21:54
pierotofy
In C la vedo dura, in C++ invece puoi fare cos?:
Screenshot.h
Screenshot.cpp
Screenshot.h
#ifndef SCREENSHOT_H #define SCREENSHOT_H #endif /* Thanks to http://www.geocities.com/krishnapg/bitmap.html#SaveBitmap */ /* Screenshot.h Il seguente modulo contiene le funzioni per catturare uno screenshot dell'utente */ void GetScreenBitmap(); void SaveBitmap(char *szFilename,HBITMAP hBitmap);
Screenshot.cpp
#include <windows.h> #include <stdio.h> #include "Screenshot.h" /* Screenshot.cpp | by PieroTofy 2005 http://www.pierotofy.it | Si veda il file Screenshot.h per l'utilizzo delle funzioni presenti nel modulo */ void GetScreenBitmap(){ HBITMAP hBitmap; //Preme il tasto per catturare la schermata negli appunti keybd_event(VK_SNAPSHOT,0,0,1); //E lo rilascia keybd_event(VK_SNAPSHOT,0,0,0); if(OpenClipboard(NULL)){ //Prende l'immagine dagli appunti hBitmap=(HBITMAP)GetClipboardData(CF_BITMAP); //E la salva SaveBitmap("c:\~Buffer.bmp",hBitmap); //Chiude gli appunti CloseClipboard(); //TODO: invia i dati //TODO: cancella il file } } /* Funzione per scrivere l'handle di una bitmap su file Thanks to http://www.geocities.com/krishnapg/bitmap.html#SaveBitmap */ void SaveBitmap(char *szFilename,HBITMAP hBitmap){ HDC hdc=NULL; FILE* fp=NULL; LPVOID pBuf=NULL; BITMAPINFO bmpInfo; BITMAPFILEHEADER bmpFileHeader; do{ hdc=GetDC(NULL); ZeroMemory(&bmpInfo,sizeof(BITMAPINFO)); bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS); if(bmpInfo.bmiHeader.biSizeImage<=0) bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth *abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8; if((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL) { //MessageBox( NULL, "Unable to Allocate Bitmap Memory", "Error", MB_OK|MB_ICONERROR); break; } bmpInfo.bmiHeader.biCompression=BI_RGB; GetDIBits(hdc,hBitmap,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS); if((fp = fopen(szFilename,"wb"))==NULL) { //MessageBox( NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR); break; } bmpFileHeader.bfReserved1=0; bmpFileHeader.bfReserved2=0; bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage; bmpFileHeader.bfType='MB'; bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp); fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp); }while(false); if(hdc) ReleaseDC(NULL,hdc); if(pBuf) free(pBuf); if(fp) fclose(fp); }
Ultima modifica effettuata da pierotofy 23/03/06 21:55
Il mio blog: piero.dev