Leer y escribir ventana ajena a mi proceso

elkaoD

Veamos, necesito leer la pantalla de un Flash que me aparece a pantalla completa para operar con esos datos y luego dibujar encima con mi proceso. He pensado en hacer un hook para que, tras cada mensaje WM_PAINT que le llegue a la ventana, hacer una copia de los datos con BitBlt o como sea y entonces pintar con el API de Windows encima. He leído por ahí que a lo mejor tengo que inyectar una DLL para poder hacer el hook de WM_PAINT. Como necesito hacer hook de una ventana de Flash, ¿Tengo que inyectar la DLL en Firefox o cómo va el rollo?

Otra cosa que había pensado es que, como la aplicación es a pantalla completa, no tengo ni que hacer hook, con copiar los contenidos de toda la pantalla me valdría, pero entonces... ¿Cómo dibujo? ¿Se podría hacer un overlay encima de la pantalla de Flash con una ventana 'always on top' transparente o algo de eso? ¿Es factible? ¿Qué se os ocurre?

Gracias ;)

r2d2rigo

Si optas por la segunda solucion, tienes que hacer dos cosas:
1- copiar la imagen en un buffer de tu aplicacion, dibujar sobre ella, y mostrarla en tu ventana.
2- traspasar el input (raton, teclado) de tu ventana a la de flash.

Es lo mas facil que se me ocurre ahora mismo, he descartado dibujar en el flash directamente porque al ser un plugin gestionado por FF, meterle mano puede ser las risas...

PD: h4x :P

elkaoD

#2, yep, había pensado en eso, pero es que la ventana flash en cuanto recibe input se pone a pantalla completa, así que el método de la venta "proxy" no sé si valdría.

LOc0

¿De vacaciones elka0d xD? Pasa de los hooks de momento. Para leer puedes forzar un PRINT SCREEN con keybd_event y luego leer del CLIPBOARD y para escribir podrías tirar de BeginPaint necesitarás el HWND de la ventana donde quieres pintar, es decir el handle del Firefox que pueds sacar con findwindowex

Por cierto, este thread sin decir qué pretendes hacer globalmente es un timo :P

Salu2 ;)

elkaoD

#4, sí, si lo que quiero hacer es básicamente eso, pero necesito saber cuando hay un evento de pintado para poder pintar yo justo despues. Si no, hay un montón de parpadeo. He encontrado un montón de información inyectando una DLL y haciendo subclassing del procedimiento de la ventana. Por alguna razón, en la ventana a pantalla completa, los únicos mensajes que se pasan son un timer del propio juego, unos relacionados con el ratón, y uno no estandar, 0x401, que si lo paro deja de cambiar la imagen, pero no debe ser un WM_PAINT porque hace igual o más flicker dibujar tras ese mensaje.

LOc0

Puff, no sé. La verdad es que hace mil años que no trasteo con hooks y ahora mismo no tengo tiempo de ponerme a compilarme programillas de prueba... ¿Has probado con WH_CALLWNDPROCRET? Salta después de que un mensaje es procesado. Busca un WM_PAINT aunque si dices que no te salen a lo mejor no se usan en la aplicación... Prueba primero en una ventana normal (o hazte el típico programa de prueba). Full screen que yo sepa no tiene misterio, es una ventana ampliada al tamaño exacto del escritorio, así que no debería ser "especial"...

Salu2 ;)

Usuarios habituales

  • LOc0
  • elkaoD
  • r2d2rigo