Pregunta

Editar : Además de la recompensa, que estamos dispuestos a pagar $ 250 a tener este error corregido en el código base Firefox / Gecko. Aquí es un simple proyecto de prueba (Visual Studio 2008 C #) que reproduce el problema.

Editar # 2 que estamos dispuestos a pagar $ 600 a tener este error corregido. Ver arriba para proyecto de ejemplo que reproduce el problema.

Tenemos un control de Firefox (Gecko) ActiveX en nuestro Formulario C # Windows para mostrar HTML.

Cuando este control ActiveX Firefox está en nuestro formulario, alrededor del 2-3% de las pulsaciones de teclas no lo hacen a través. O mejor dicho, un mensaje de Windows diferente se envía:

mantenga pulsada la tecla TAB para desplazarse por 3 cuadros de texto WinForms regulares. Se comportará correctamente el 97% de las veces. Spy ++ nos dice WM_KEYDOWN mensaje se envía correctamente:

comportamiento normal http://judahhimango.com/images/normaltab.jpg

Sin embargo, al azar, tal vez un 2-3% de las veces, la tecla de tabulación (u otra tecla) no se procesa la derecha. Spy ++ nos dice WM_CHAR se está enviando en su lugar:

http://judahhimango.com/images/screwytab.png

Cuando se produce el comportamiento extraño, ya sea la clave no se procesará en absoluto, o se procesa de forma incorrecta (por ejemplo, la inserción de un carácter '\ t' en un cuadro de texto que no admite caracteres de tabulación.

Esto sólo se produce si el control ActiveX Firefox está en nuestro formulario.

Nuestra pregunta es: : no instalar el motor de Firefox / Gecko algún tipo de gancho de teclado que pueden causar estos efectos secundarios? O mejor aún, ¿cómo podemos solucionar este problema?

¿Fue útil?

Solución

El mensaje es generado por WM_CHAR llamada TranslateMessage, por lo que un buen lugar para empezar a buscar sería el TranslateMessage llama en el código fuente del Gecko.

En el primer ejemplo de código que ya ha proporcionado la función, se importe únicamente por dos bibliotecas - mozctl.dll y xul.dll. Dado que usted afirma que el mismo error ocurre también con GeckoFX podemos tomar mozctl.dll fuera de la ecuación. Eso nos deja con xul.dll, por lo que teniendo en cuenta el código fuente Gecko Yo sugeriría que mirar en widget\src\windows\nsToolkit.cpp. No estoy seguro de si el código se ejecuta si el motor está incrustado, pero si es entonces la biblioteca inicia un suministro de mensajes nuevos en toda subproceso diferente, que está obligado a romper.

Por desgracia, no puedo ejecutar o compilar el código en mi máquina (7 x64 de Windows w / o instalado el control ActiveX de Mozilla), así que no puedo comprobar nada de esto con un depurador. Espero que ayude a alguien a seguir hacia abajo aún más.

Otros consejos

La raíz del problema es que cuando Mozilla está incrustada en otra aplicación, de forma incorrecta bombas de mensajes de Windows cuando se distribuye eventos internos. Mozilla utiliza un sistema de eventos para coordinar a través de hilos o para programar el procesamiento diferido de un hilo (ver nsIThread , nsIEventTarget ). Si incrusta una página web con una gran cantidad de XmlHttpRequests activos, por ejemplo, Mozilla hará uso de su interfaz de envío de evento para distribuir eventos de nuevo a javascript y se bombeará mensajes de ventanas como un efecto secundario. Una vez que los eventos de Mozilla están completamente despachados, que se remonta al bucle principal evento.

Cuando las bombas de Mozilla mensajes de ventanas, que no incluye el procesamiento adicional realizado por ciclo de eventos de la aplicación - IsDialogMessage (), TranslateMessage (), PreTranslateMessage (), o cualquier otra transformación previa se omite cuando Mozilla se mete en este estado . Por lo tanto, los síntomas incluyen pulsaciones de tecla de tabulación para insertarse como un personaje en vez de ser utilizado para la navegación de diálogo, teclas de acceso rápido del teclado se ignoran de forma esporádica o mensaje personalizado pre-procesamiento de ser saltado de forma esporádica. Por ejemplo, la Perspectiva 2007/2010 "Componer" pantalla pierde esporádicamente pulsaciones de teclado porque se basa en el mensaje personalizado pre-procesamiento para manejar la entrada de teclado.

https://bugzilla.mozilla.org/show_bug.cgi?id= 582790 para una revisión que soluciona el problema.

Tengo Snoop gratuito y PSM Anti-Keylogger. Uno de ellos detecta Firefox tratando de instalar un gancho de teclado. Mozilla / Firefox archivo xul.dll intento de instalar en el gancho de teclado. Negado.

Me di cuenta de que ha ejecutado la totalidad de la interoperabilidad a sí mismo. Se puede tratar esto con el GeckoFX proyecto y ver si le da el mismo error? Yo uso este proyecto en el trabajo y no he encontrado ningún problema todavía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top