Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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);
}
USO:
Código:
AnsiString archivoBMP;

ScreenShot(archivoBMP.c_str());
Responder Con Cita
  #2  
Antiguo 05-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 13:08:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi