Ir al contenido


Foto

Problema con captura de pantalla en W7


  • Por favor identifícate para responder
7 respuestas en este tema

#1 omar73rnr

omar73rnr

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 20 julio 2011 - 03:52

Buenas, soy nuevo en este foro.
Les comento, estoy haciendo un programa que saca capturas de la pantalla de un juego cada cierto tiempo, en Windows XP saca correctamente las capturas, pero el problema es que en W7 haciendo tests con amigos (tienen W7 64b) saca solamente capturas del escritorio o aparecen en negro. Alguna idea que de por que ocurre esto?
PD: será porque el juego utiliza OpenGL?
Aunque en Windows XP toma las capturas correctamente a pesar de utilizar OpenGL, de ser asi, hay alguna forma de poder tomar las capturas sin problemas en W7?
Gracias de antemano.
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 20 julio 2011 - 04:11

Las capturas de pantalla"normales" no incluyen nada que este en un overlay, por ejemplo un video en reproduccion aparece como una ventana negra.

Lo mimso se aplica a juegos en OpenGL o DirectX, estos sistemas suelen usar overlays para poder escalarlos al tamaño de l apantalla sin gastar CPU, y en ese caso capturarlos se complica bastante.

No se si en Win7 se usan mas overlays al ejecutar OpenGL que en XP, pero posiblemente la causa sea un cambio de "plitica" en este estilo.

Si puedes cambiar la configuracion de un player de video para que en lughar de un overlay use otros metodos mas lentos, es posible capturar un fotograma, pero el video se ve lentisssimo. En juegos deberia ser similar, peor no tengo mas pistas que darte.
  • 0

#3 omar73rnr

omar73rnr

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 20 julio 2011 - 05:41

Gracias por la respuesta.
Yo lo que pense es que podia ser por la libreria que use para hacer las capturas, que es Bitblt y que a lo mejor no funcionaba en W7, pero como no se mucho sobre este tema por eso preguntaba.
Debe de haber alguna forma de poder capturar la pantalla, ya que programas como por ejemplo Fraps pueden hacer las capturas normalmente, en W7 tambien lo hace.
Hay alguna forma (en codigo Delphi obviamente) de poder hacer aunque sea forzadamente la captura en W7?
Gracias nuevamente por las posibles soluciones que puedan darme. Saludos.
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 20 julio 2011 - 11:56

No creo que delphi pueda darte eso, seguramente necesitaras llamadas a apis externas para capturar los overlays aparte y luego unirlas, no parece sencillo.
  • 0

#5 omar73rnr

omar73rnr

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 20 julio 2011 - 01:52

Gracias nuevamente por contestar, volviendo al tema, es muy complicado hacer esto con alguna api de W7?
PD: estube buscando algo de info y encontre poco pero al fin es algo, dejo los links para ver si puede servir de ayuda: https://forums.embar...?threadID=37725 lo dejo precisamente para que lo vea alguien que sabe, ya que yo todavia no tengo muy en claro este tema.
PD2: tambien leí buscando info que se puede hacer una "emulacion" del boton de captura que windows trae por defecto usando VK_PRINT o algo asi, esto puede llegar a servir para el proyecto que estoy haciendo?
Saludos.
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 julio 2011 - 03:19

Hola Omar, sería bueno que nos mostraras un poco de código del por qué sólo te funciona en Windows XP y no en Windows 7, mientras revisa la librería GDI de Windows.

Saludos.

  • 0

#7 omar73rnr

omar73rnr

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 20 julio 2011 - 05:43

Gracias por las respuestas, enecumene, este es el codigo que tengo para hacer las capturas de pantalla:


delphi
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. begin
  3. Visible:= False;
  4. Application.ProcessMessages;
  5. Bmp := TBitmap.Create;
  6. try
  7. Bmp.FreeImage;
  8. Bmp.Width := GetSystemMetrics(SM_CXSCREEN);    //Screen.Width
  9. Bmp.Height := GetSystemMetrics(SM_CYSCREEN);  //Screen.Height
  10. BitBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, GetDc(0), 0, 0, SRCCOPY);
  11. for i := 1 to n do
  12. begin
  13. n:=i+1;
  14. Bmp.SaveToFile('pruebascreen_'+inttostr(n)+'.bmp');
  15. end;
  16. finally
  17.   Bmp.Free;
  18. end;
  19. Visible:= True ;
  20. end;


Este codigo lo tengo en un timer para que tome las capturas cada cierto tiempo.

Ahora voy a mirar el link que dejaste. Saludos
  • 0

#8 omar73rnr

omar73rnr

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 24 julio 2011 - 05:38

Perdon por el doble post, no me dejaba editar el mensaje anterior.
Estube mirando la info de la libreria GDI y por lo que vi esta en C y no se como pasarlo a delphi o como usarlo en la aplicacion que estoy haciendo. Alguna ayuda?
Gracias nuevamente.
  • 0




IP.Board spam blocked by CleanTalk.