![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Codigo para capturar una pantalla del PC en archivo BITMAP
Código:
#include <windows.h> Código:
///// Declaramos la funcion ScreenShot()
void ScreenShot(char*BmpName);
void ScreenShot(char*BmpName)
{
HWND DesktopHwnd = GetDesktopWindow();
RECT DesktopParams;
HDC DevC = GetDC(DesktopHwnd);
GetWindowRect(DesktopHwnd,&DesktopParams);
DWORD Width = DesktopParams.right - DesktopParams.left;
DWORD Height = DesktopParams.bottom - DesktopParams.top;
DWORD FileSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+(sizeof(RGBTRIPLE)+1*(Width*Height*4));
char *BmpFileData = (char*)GlobalAlloc(0x0040,FileSize);
PBITMAPFILEHEADER BFileHeader = (PBITMAPFILEHEADER)BmpFileData;
PBITMAPINFOHEADER BInfoHeader = (PBITMAPINFOHEADER)&BmpFileData[sizeof(BITMAPFILEHEADER)];
BFileHeader->bfType = 0x4D42; // BM
BFileHeader->bfSize = sizeof(BITMAPFILEHEADER);
BFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
BInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
BInfoHeader->biPlanes = 1;
BInfoHeader->biBitCount = 24;
BInfoHeader->biCompression = BI_RGB;
BInfoHeader->biHeight = Height;
BInfoHeader->biWidth = Width;
RGBTRIPLE *Image = (RGBTRIPLE*)&BmpFileData[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
RGBTRIPLE color;
HDC CaptureDC = CreateCompatibleDC(DevC);
HBITMAP CaptureBitmap = CreateCompatibleBitmap(DevC,Width,Height);
SelectObject(CaptureDC,CaptureBitmap);
BitBlt(CaptureDC,0,0,Width,Height,DevC,0,0,SRCCOPY|CAPTUREBLT);
GetDIBits(CaptureDC,CaptureBitmap,0,Height,Image,(LPBITMAPINFO)BInfoHeader, DIB_RGB_COLORS);
DWORD Junk;
HANDLE FH = CreateFileA(BmpName,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,0,0);
WriteFile(FH,BmpFileData,FileSize,&Junk,0);
CloseHandle(FH);
GlobalFree(BmpFileData);
}
Código:
AnsiString archivoBMP; ScreenShot(archivoBMP.c_str()); |
|
#2
|
|||
|
|||
|
he tratado de convertirlo pero no se si estara bien, por si os da la cosa de probarlo en Delphi
Código:
uses Windows, SysUtils; procedure ScreenShot(BmpName: string); var DesktopHwnd: HWND; DesktopParams: TRect; DevC: HDC; Width, Height: DWORD; FileSize: DWORD; BmpFileData: Pointer; BFileHeader: PBITMAPFILEHEADER; BInfoHeader: PBITMAPINFOHEADER; Image: PRGBTriple; CaptureDC: HDC; CaptureBitmap: HBITMAP; Junk: DWORD; FH: THandle; begin DesktopHwnd := GetDesktopWindow(); DevC := GetDC(DesktopHwnd); GetWindowRect(DesktopHwnd, DesktopParams); Width := DesktopParams.Right - DesktopParams.Left; Height := DesktopParams.Bottom - DesktopParams.Top; FileSize := SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER) + (SizeOf(RGBTRIPLE) * Width * Height); BmpFileData := GlobalAlloc(GPTR, FileSize); BFileHeader := PBITMAPFILEHEADER(BmpFileData); BInfoHeader := PBITMAPINFOHEADER(Pointer(NativeUInt(BmpFileData) + SizeOf(BITMAPFILEHEADER))); BFileHeader.bfType := $4D42; // BM BFileHeader.bfSize := FileSize; BFileHeader.bfOffBits := SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER); BInfoHeader.biSize := SizeOf(BITMAPINFOHEADER); BInfoHeader.biPlanes := 1; BInfoHeader.biBitCount := 24; BInfoHeader.biCompression := BI_RGB; BInfoHeader.biHeight := Height; BInfoHeader.biWidth := Width; Image := PRGBTriple(Pointer(NativeUInt(BmpFileData) + SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER))); CaptureDC := CreateCompatibleDC(DevC); CaptureBitmap := CreateCompatibleBitmap(DevC, Width, Height); SelectObject(CaptureDC, CaptureBitmap); BitBlt(CaptureDC, 0, 0, Width, Height, DevC, 0, 0, SRCCOPY or CAPTUREBLT); GetDIBits(CaptureDC, CaptureBitmap, 0, Height, Image^, PBITMAPINFO(BInfoHeader), DIB_RGB_COLORS); FH := CreateFile(PChar(BmpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0); WriteFile(FH, BmpFileData^, FileSize, Junk, nil); CloseHandle(FH); GlobalFree(BmpFileData); DeleteObject(CaptureBitmap); DeleteDC(CaptureDC); ReleaseDC(DesktopHwnd, DevC); end; |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Código para hacer una captura de pantalla | snakesskaters | Varios | 3 | 13-11-2009 11:09:25 |
| Capturar Pantalla = Pantalla negra | DarkDudae | Gráficos | 8 | 27-10-2008 12:29:36 |
| Captura de pantalla en un Bitmap | Neftali [Germán.Estévez] | Trucos | 0 | 30-06-2006 10:13:23 |
| Capturar la pantalla en un archivo Jpg | seoane | Trucos | 1 | 24-06-2006 02:34:19 |
| codigo para descomprimir un archivo .zip | JAI_ME | Varios | 4 | 30-01-2006 17:37:08 |
|