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.
Problema con captura de pantalla en W7
Comenzado por
omar73rnr
, jul 20 2011 03:52
7 respuestas en este tema
#1
Escrito 20 julio 2011 - 03:52
#2
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.
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.
#3
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.
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.
#4
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.
#5
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.
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.
#6
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.
Saludos.
#7
Escrito 20 julio 2011 - 05:43
Gracias por las respuestas, enecumene, este es el codigo que tengo para hacer las capturas de pantalla:
Este codigo lo tengo en un timer para que tome las capturas cada cierto tiempo.
Ahora voy a mirar el link que dejaste. Saludos
delphi
procedure TForm1.Timer1Timer(Sender: TObject); begin Visible:= False; Application.ProcessMessages; Bmp := TBitmap.Create; try Bmp.FreeImage; Bmp.Width := GetSystemMetrics(SM_CXSCREEN); //Screen.Width Bmp.Height := GetSystemMetrics(SM_CYSCREEN); //Screen.Height BitBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, GetDc(0), 0, 0, SRCCOPY); for i := 1 to n do begin n:=i+1; Bmp.SaveToFile('pruebascreen_'+inttostr(n)+'.bmp'); end; finally Bmp.Free; end; Visible:= True ; 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
#8
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.
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.