![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
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; |
![]() |
|
|
![]() |
||||
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 |
![]() |
|