Domanda

Modifica : Oltre alla bontà, siamo disposti a pagare $ 250 a avere questo bug nel codice di base di Firefox / Gecko. Ecco un semplice progetto di test (Visual Studio 2008 C #) che riproduce il problema.

Modifica # 2 siamo disposti a pagare $ 600 a questo difetto. Vedi sopra per progetto di esempio che riproduce il problema.

Abbiamo un controllo Firefox (Gecko) ActiveX sul nostro C # Windows Form per visualizzare HTML.

Quando questo controllo ActiveX è Firefox con il nostro modulo, circa il 2-3% dei nostri tasti premuti non fanno fino in fondo. O meglio, viene inviato un messaggio di Windows diversa:

Tenere premuto il tasto TAB per scheda attraverso 3 regolari WinForms caselle di testo. Si comporterà correttamente il 97% del tempo. Spy ++ ci dice WM_KEYDOWN messaggio viene inviato correttamente:

comportamento normale http://judahhimango.com/images/normaltab.jpg

Ma in modo casuale, forse 2-3% del tempo, il tasto di tabulazione (o altro tasto) non sono lavorate a destra. Spy ++ ci dice WM_CHAR viene inviato invece:

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

Quando si verifica il comportamento dispari, sia la chiave non sono lavorate affatto o viene elaborato in modo errato (ad esempio inserendo un 't \' caratteri in una casella di testo che non supporta i caratteri di tabulazione.

Questo si verifica solo se il controllo ActiveX è Firefox con il nostro modulo.

La nostra domanda è : non motore di Firefox / Gecko installare un qualche tipo di hook di tastiera che potrebbero causare questi effetti collaterali? O meglio ancora, come possiamo risolvere questo problema?

È stato utile?

Soluzione

Il messaggio WM_CHAR è generato da TranslateMessage chiamata, quindi un buon posto per iniziare la ricerca sarebbe la TranslateMessage chiama nel codice sorgente Gecko.

Nel primo codice di esempio che hai fornito la funzione è importato solo da due librerie - mozctl.dll e xul.dll. Dal momento che si sostiene che lo stesso errore si verifica anche con GeckoFX possiamo prendere mozctl.dll fuori dall'equazione. Questo ci lascia con xul.dll, quindi dato il codice sorgente di Gecko Vorrei suggerire di guardare in widget\src\windows\nsToolkit.cpp. Non sono sicuro se il codice viene eseguito se il motore è incorporato, ma se è poi la biblioteca inizia una nuova pompa messaggio nel thread diverso, che è destinato a rompersi.

Purtroppo non posso correre o compilare il codice sulla mia macchina (Windows 7 x64 w / o il controllo ActiveX installato Mozilla), quindi non posso verificare niente di tutto questo con un debugger. Speranza che aiuta qualcuno a rintracciarlo ulteriormente.

Altri suggerimenti

Il problema principale è che quando Mozilla è incorporato in un'altra applicazione, esso pompa in modo non corretto i messaggi di Windows quando si invia eventi interni. Mozilla utilizza un sistema di evento per coordinare tutti fili o per fissare elaborazione differita su un filo (vedi nsIThread , nsIEventTarget ). Se si incorpora una pagina web con un sacco di XMLHttpRequests attivi, per esempio, Mozilla userà la sua interfaccia dispacciamento evento di inviare gli eventi di nuovo a javascript e pomperà messaggi di Windows come un effetto collaterale. Una volta che gli eventi di Mozilla sono completamente spediti, risale al ciclo di eventi principale.

Quando Mozilla pompe messaggi di Windows, esso non include l'elaborazione aggiuntiva fatto da ciclo di eventi dell'applicazione - IsDialogMessage (), TranslateMessage (), PreTranslateMessage (), o qualsiasi altro pre-elaborazione vengono ignorati quando Mozilla ottiene in questo stato . I sintomi includono pertanto scheda tasti premuti sempre inseriti come carattere invece di essere utilizzato per la navigazione di dialogo, tasti di scelta rapida da tastiera viene sporadicamente ignorati, o un messaggio personalizzato di pre-elaborazione essendo sporadicamente saltato. Ad esempio, l'Outlook 2007/2010 "Componi" schermo perde sporadicamente combinazioni di tasti perché si basa su un messaggio personalizzato di pre-elaborazione per gestire l'input da tastiera.

https://bugzilla.mozilla.org/show_bug.cgi?id= 582790 per una patch che risolve il problema.

Ho Snoop libero e PSM Anti-Keylogger. Uno di essi rilevato firefox cercando di installare un gancio tastiera. Mozilla / Firefox il file xul.dll tentativo di installazione a hook di tastiera. NEGATO.

Ho notato che è stato implementato tutto l'interoperabilità da soli. Si può provare questo con la GeckoFX progetto e vedere se si ottiene lo stesso errore? Io uso questo progetto al lavoro e non ho ancora incontrato problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top