Flash en pantalla completa en monitores extendidos

Últimamente he tenido la costumbre de ver muchos webcast o video postcast o películas o documentales o video tutoriales y todo tipo de videos que se pueden conseguir en la red así como youtube y otros sitios de videos. Siempre había tenido un problema de que cuando utilizas monitores alternos para ver algún video flash o streaming en pantalla completa automáticamente vuelve al tamaño original al momento de perder el foco, por lo que es muy difícil estar viendo un video en pantalla completa y al mismo tiempo trabajando en el otro monitor. Una pequeña búsqueda con mi amigo google me dijo que al parecer la gente de flash no contempló o no le pareció correcto el comportamiento de mantener la pantalla completa en el momento de perder el foco.

Las buenas noticias fueron de que no era ni remotamente la única persona con este problema que más que un problema era lo molesto de tener que ver el video en tamaño original o utilizar algún tipo de zoom integrado en los navegadores o todo tipo de trucos. Lo primero que encontré fue que alguien había parchado una dll de flash y logrado suprimir éste molesto comportamiento por default en el siguiente enlace:

http://my.opera.com/d.i.z./blog/2009/04/22/watch-fullscreen-flash-while-working-on-another-screen Flash has annoying habit of closing fullscreen mode whenever “anything” happens. Like when wind blows through the window or there is an earthquake on another continent. No seriously, it closes whenever it looses focus. But that is still too sensitive. So here is a version of flash plugin that does not do that. It’s version 10.0.22.87 (latest at this time) with one byte changed (compare with original if you don’t believe me.

¡Excelente! ya solo era cuestión de descargar la dll parchada y remmplazarla en mi instalación de flash y todo funcionaria de maravilla, ¡boom! no era tan sencillo como eso. Cuando me dí cuenta que la dll descargada no era compatible con mi versión de falsh ya que yo tengo la version 10,1,53,64 y como podemos ver la dll era para versiones 10.0… etc. 🙁 triste situación, bueno pues como ya no quería batallar con el comportamiento del mendigo flash pues seguí mi búsqueda del famoso parche para corregir este comportamiento lo que me llevó a la segunda página de contenido:

http://bramp.net/blog/full-screen-hack-for-flash

On win32 open
C:\Windows\System32\Macromed\Flash\NPSWF32.dll
On win64 open
C:\Windows\SysWOW64\Macromed\Flash\NPSWF32.dllor if using Google Chrome (as Chrome now comes with the Flash plugin) open
C:\Users\Andrew\AppData\Local\Google\Chrome\Application\6.0.408.1\gcswf32.dll
or if using Google Chrome on Windows XP:
C:\Documents and Settings\Andrew\Local Settings\Application Data\Google\Chrome\Application\6.0.408.1

On version 10.1.53.38
Jump to offset
0x180227 and change bytes 74 2A to 90 90, and voila.

On version 10.1.53.55
Jump to offset
0x180410 and change bytes 74 39 to 90 90, and voila.

On version 10.1.53.64 (Chrome version)
Jump to offset
0x180753 and change bytes 74 39 to 90 90, and voila.

On version 10.1.53.64 (Normal version thanks Medlir)
Jump to offset
0x180A15 and change bytes 74 39 to 90 90, and voila.

Note this method is unsupported, and will most likely break when Flash gets updated again. It is always a good idea to backup any file first, and make sure you are on the same version as me.

For the curious this changes some code that looks like this:

if (msg == WM_KILLFOCUS)
  jump to kill_focus
if (msg == WM_PAINT)
  jump to paint

to

if (msg == WM_KILLFOCUS)
  nop nop
if (msg == WM_PAINT)
  jump to paint

and for some context the version 10.1.53.64 surrounding code looked like this:

74 39 83 E8 07 74 11 83 E8 05 75 13 8B

The 74s and 75 should be the same between versions, but all the other bytes might change.

¡Excelente! ahora sí, había encontrado no un parche sino algo todavía mejor, los pasos para parchar tu dll del flash dependiendo de la versión y de esa forma suprimir el comportamiento ya descrito. Busqué un poco de más información sobre el tema y me topé con un foro el cual describía un procedimiento de hacer el parchado siguiendo los pasos del post descrito arriba por lo que decidí aguegarlo aquí al blog y sumarle algunos screenshots para hacer el proceso accesible para cualquier persona ya que al final resulta sencillo seguir los pasos necesarios.

1. Lo primero que tenemos que hacer es checar nuestra versión de flash la que puedes checar en el siguiente enlace http://www.adobe.com/software/flash/about/ el cual te proporcionará un cuadro como se muestra a continuación con la versión de tu flash

2. De acuerdo a la versión de tu flash y al plugin que quieras parchar selecciona el path del post de arriba, en mi caso quería parchar el plugin de chrome por lo que la dll se encontraría en un path similar al C:\Documents and Settings\[Usuario]\Local Settings\Application Data\Google\Chrome\Application\[Versión de Chrome]\

3. Una vez localizado el path en donde se encuentra la dll a parchar y sabiendo de antemano que el nombre de la dll es gcswf32.dll necesitamos un editor hexadecimal para hacer la modificación necesaria como no lo indican los pasos arriba

4. El paso siguiente es instalar un editor para la dll yo utilice por recomendación del foro el Hex Editor XVI32 el cual es freeware y puedes descargar de el siguiente enlace

5. A continuación proseguimos a instalar el XVI32 Hex Editor y abrir la dll que ya tenemos identificada utilizando la opcion File->Open.. del editor como se muestra a continuacion:

6. Una vez abierta la dll y como lo dice en los pasos del post original nos vamos a la opcion de buscar en nuestro hex editor o simplemente le damos Ctr+F para desplegar el cuadro de diálogo de buscar para después de eso teclear la siguiente cadena que se nos especifica en los pasos originales: 74 39 83 E8 07 74 11 83 E8 05 75 13 8B y presionamos el boton OK para realizar la busquda como se muestra a continuacion:

7. Después de la búsqueda nos aparecerá seleccionado el registro que andamos buscando

8. Y ahora por último tenemos que cambiar los bytes 74 y 39 que aparecen al inicio por 90 y 90 respectivamente, para hacer esto es muy sencillo, seleccionamos la casilla a modificar y nos vamos al menu Edit->Overwrite String->Hex String y tecleamos 90 y damos OK y para la siguiente casilla hacemos los mismo como se muestra a continuación:

9. Por último guardamos nuestro archivo modificado, es recomendable conservar el archivo dll original y hacer todos estos cambios en una copia del mismo de esta forma si algo no va bien solo restauramos el archivo original y no pasa nada :).

Al final del día logre tener mi monitor extendido corriendo el plugin de flash en pantalla completa sin importar si sigo trabajando en la PC, y todo esto gracias a la web, a la gente que hace posible tener este tipo de procedimientos de parchado y a las ganas interminables de encontrar cosas interesantes por resolver..

Este post se extendió un poco pues quise tener registrados los pasos a seguir para lograr modificar el comportamiento del flash y aparte para poderlo compartir con la gente que le interesase, aunque todos estos pasos de hecho ya estaban documentados lo unico que hice fue anadir descripciones mas amplias e imagenes al proceso para hacerlo más amigable para usuarios que no estan tan relacionados con este tipo de cambios..

¡Salduos! 🙂

One thought on “Flash en pantalla completa en monitores extendidos

Leave a Reply

Your email address will not be published. Required fields are marked *