send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Captura de pantalla (Zonas determinadas)

  • 0 Respuestas
  • 1297 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5267
  • Actividad:
    48.33%
  • Reputación 26
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Mayo 22, 2011, 09:47:37 pm »
/*
CAPTURA PANTALLA
Programado por XpyXt
web: You are not allowed to view links. Register or Login
mail: xpyxt@xpyxt.no-ip.org


Licencia de implementacion: publico este source bajo GPL, es decir, si tu
usas este codigo fuente en algun programa deberas publicar su source. Como
me entere de que lo has usado y no has publicado el codigo fuente voy a tu
casa y te amputo las manos. ¿Entendido?

Explicacion y modo de uso: Este source nos captura la pantalla del windows,
Hay 3 arrays de datos, 2 cabeceras del BMP y el RAW del bmp.


array CBA1 &bfh, Tamaño de la CBA1 sizeof(bfh)
array CBA2 &bmi.bmiHeader, Tamaño de la CBA2 sizeof(BITMAPINFOHEADER)
array (char *)pbBits, Tamaño del RAW bmi.bmiHeader.biSizeImage

--------------------
Modificado por Lympex para poder hacer capturas de una determinada zona de la pantalla

Código: C
  1. */
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <windows.h>
  5. #include <wingdi.h>
  6.  
  7. typedef struct _CAPTURA_
  8. {
  9.         char                    Ruta[MAX_PATH];
  10.         bool                    PantallaCompleta;
  11.         unsigned int    Alto;
  12.                 unsigned int    Ancho;
  13.                 unsigned int    OrigenX;
  14.                 unsigned int    OrigenY;
  15. }CAPTURA;
  16.  
  17. void Capturar(CAPTURA *datos)
  18. {
  19.         BITMAPINFO bmi;
  20.         BITMAPFILEHEADER bfh;
  21.      
  22.      unsigned int Ancho,Ancho1;
  23.      unsigned int Alto,Alto1;
  24.      HWND hWnd;
  25.      HDC hdc ;
  26.      HDC memDC;
  27.      HBITMAP hbm ;
  28.      HBITMAP hbmOld;
  29.      BYTE *pbBits;
  30.      
  31.      HANDLE hfile;
  32.      DWORD dwWritten;
  33.      
  34.      Ancho1 = GetSystemMetrics(SM_CXSCREEN);
  35.      Alto1 = GetSystemMetrics(SM_CYSCREEN);
  36.  
  37.      if(datos->PantallaCompleta==true)
  38.      {
  39.                         datos->Ancho=Ancho1;
  40.                         datos->Alto=Alto1;
  41.      }else{
  42.                         //para no salirnos de la pantalla, reajustamos los valores si es necesario                     
  43.                         if((datos->Ancho+datos->OrigenX)>Ancho1)
  44.                         datos->Ancho=Ancho1-datos->OrigenX;
  45.                        
  46.                         if((datos->Alto+datos->OrigenY)>Alto1)
  47.                         datos->Alto=Alto1-datos->OrigenY;
  48.                        
  49.                         Alto=datos->Alto;
  50.                         Ancho=datos->Ancho;
  51.      }
  52.  
  53.      hWnd = GetDesktopWindow();
  54.      hdc = GetDC(hWnd);
  55.      memDC = CreateCompatibleDC(hdc);
  56.      hbm = CreateCompatibleBitmap(hdc, datos->Ancho, datos->Alto);
  57.      hbmOld = (HBITMAP)SelectObject(memDC, hbm);
  58.      
  59.      if(datos->PantallaCompleta==true)
  60.      BitBlt(memDC, 0, 0, datos->Ancho, datos->Alto, hdc, 0, 0, SRCCOPY);
  61.      else
  62.      BitBlt(memDC, 0, 0, datos->Ancho, datos->Alto, hdc, datos->OrigenX,datos->OrigenY, SRCCOPY);
  63.      
  64.      ZeroMemory(&bmi, sizeof(bmi));
  65.      bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  66.      bmi.bmiHeader.biWidth = datos->Ancho;
  67.      bmi.bmiHeader.biHeight = datos->Alto;
  68.      bmi.bmiHeader.biBitCount = 24;
  69.      bmi.bmiHeader.biPlanes = 1;
  70.      bmi.bmiHeader.biCompression = BI_RGB;
  71.      bmi.bmiHeader.biSizeImage = 32 * datos->Ancho * datos->Alto / 8;
  72.  
  73.      pbBits = (BYTE*)You are not allowed to view links. Register or Login(bmi.bmiHeader.biSizeImage*sizeof(bmi.bmiHeader.biSizeImage));
  74.  
  75.      GetDIBits(memDC,hbm,0,bmi.bmiHeader.biHeight,pbBits,&bmi,DIB_RGB_COLORS );
  76.  
  77.      bfh.bfType = ('M' << 8) + 'B';
  78.      bfh.bfSize = sizeof(BITMAPFILEHEADER) + bmi.bmiHeader.biSizeImage + sizeof(BITMAPINFOHEADER);
  79.      bfh.bfReserved1 = 0;
  80.      bfh.bfReserved2 = 0;
  81.      bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
  82.  
  83.      //(char *)pbBits // string de datos imagen sin cabezeras
  84.      //guardamos en el fichero
  85.      hfile = CreateFile(datos->Ruta,GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0);
  86.      WriteFile(hfile,&bfh, sizeof(bfh), &dwWritten, NULL);
  87.      WriteFile(hfile,&bmi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
  88.      WriteFile(hfile,pbBits, bmi.bmiHeader.biSizeImage, &dwWritten, NULL);
  89.      CloseHandle(hfile);
  90.  
  91.      SelectObject(memDC, hbmOld);
  92.      DeleteDC(memDC);
  93.      ReleaseDC(hWnd,hdc);
  94.      DeleteObject(hbm);
  95.  
  96.      You are not allowed to view links. Register or Login(pbBits);
  97.        
  98.         return;
  99. }
  100.  
  101. int main()
  102. {
  103.     CAPTURA datos;
  104.    
  105.     //CAPTURAMOS LA PANTALLA COMPLETA
  106.     You are not allowed to view links. Register or Login(&datos,0,sizeof(CAPTURA));
  107.     You are not allowed to view links. Register or Login(datos.Ruta,"PantallaCompleta.bmp");
  108.     datos.PantallaCompleta=true;
  109.     Capturar(&datos);
  110.    
  111.     //CAPTURAMOS UNA REGION DE LA PANTALLA
  112.     You are not allowed to view links. Register or Login(&datos,0,sizeof(CAPTURA));
  113.     You are not allowed to view links. Register or Login(datos.Ruta,"Region.bmp");
  114.     datos.OrigenX=datos.OrigenY=500;//Coordenadas X e Y (en la pantalla) del ángulo superior izquierdo de nuestro rectángulo
  115.     datos.Alto=500;//Altura de nuestro rectángulo
  116.     datos.Ancho=3000;//Anchura de nuestro rectángulo
  117.     datos.PantallaCompleta=false;//Capturar una región
  118.     Capturar(&datos);
  119.    
  120.     You are not allowed to view links. Register or Login("pause");
  121.     return 0;
  122. }
« Última modificación: Febrero 08, 2014, 06:08:31 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!



[Source C++] Visualizando en pantalla lo que envia el microcontrolador(PIC).

Iniciado por Turka

Respuestas: 2
Vistas: 1709
Último mensaje Diciembre 03, 2012, 09:06:34 am
por Sanko
Obtener resolucion de pantalla [C/C++]

Iniciado por Expermicid

Respuestas: 0
Vistas: 3057
Último mensaje Enero 17, 2013, 01:48:47 pm
por Expermicid
Captura de pantalla

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1537
Último mensaje Mayo 22, 2011, 09:48:48 pm
por ANTRAX