Управление Firefox / Gecko, вмешивающееся в нажатия клавиш Windows Forms - PullRequest
4 голосов
/ 10 июля 2009

Редактировать : В дополнение к награде мы готовы заплатить 250 долларов США за исправление этой ошибки в кодовой базе Firefox / Gecko. Вот простой тестовый проект (Visual Studio 2008 C #), который воспроизводит проблему.

Edit # 2 мы готовы заплатить 600 долларов, чтобы исправить эту ошибку. См. Выше пример проекта, который воспроизводит проблему.

У нас есть элемент управления ActiveX Firefox (Gecko) в нашей форме C # Windows для отображения HTML.

Когда этот элемент управления Firefox ActiveX находится в нашей форме, около 2-3% нажатий клавиш не проходят. Или, скорее, отправлено другое сообщение Windows:

Мы удерживаем клавишу TAB для перехода по трем обычным текстовым полям WinForms. Это будет вести себя правильно в 97% случаев. Spy ++ сообщает нам, что сообщение WM_KEYDOWN отправлено правильно:

нормальное поведение http://judahhimango.com/images/normaltab.jpg

Но случайно, возможно, в 2-3% случаев клавиша табуляции (или другая клавиша) обрабатывается неправильно. Spy ++ сообщает нам, что вместо этого отправляется WM_CHAR:

странное поведение http://judahhimango.com/images/screwytab.png

Когда происходит странное поведение, либо ключ вообще не обрабатывается, либо обрабатывается неправильно (например, вставка символа '\ t' в текстовое поле, которое не поддерживает символы табуляции.

Это происходит только в том случае, если в нашей форме находится элемент управления Firefox ActiveX.

Наш вопрос : устанавливает ли движок Firefox / Gecko какую-либо зацепку для клавиатуры, которая может вызвать эти побочные эффекты? Или еще лучше, как мы можем решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 18 августа 2009

Сообщение WM_CHAR генерируется вызовом TranslateMessage, поэтому хорошим местом для начала были бы вызовы TranslateMessage в исходном коде Gecko.

В первом примере кода, который вы предоставили, функция импортируется только двумя библиотеками - mozctl.dll и xul.dll. Поскольку вы утверждаете, что такая же ошибка происходит и с GeckoFX, мы можем вывести mozctl.dll из уравнения. Это оставляет нас с xul.dll, поэтому, учитывая исходный код Gecko, я бы посоветовал изучить widget\src\windows\nsToolkit.cpp. Я не уверен, что код запускается, если встроенный движок, но если это так, то библиотека запускает новый поток сообщений в другом потоке, который обязательно сломается.

К сожалению, я не могу запустить или скомпилировать код на моей машине (Windows 7 x64 без установленного элемента управления Mozilla ActiveX), поэтому я не могу проверить это с помощью отладчика. Надеюсь, это поможет кому-то отследить его дальше.

1 голос
/ 25 августа 2010

У меня есть Snoop Free и PSM Anti-Keylogger. Один из них обнаружил, что Firefox пытается установить Keyboard Hook. Mozilla / Firefox файл xul.dll пытается установить на клавиатуре крючок. ЗАПРЕЩЕНО.

1 голос
/ 29 июля 2010

Основная проблема заключается в том, что, когда Mozilla встроена в другое приложение, он неправильно обрабатывает сообщения Windows при отправке внутренних событий. Mozilla использует систему событий для координации между потоками или для планирования отложенной обработки в потоке (см. nsIThread , nsIEventTarget ). Например, если вы встраиваете веб-страницу с большим количеством активных запросов XMLHTTP, Mozilla будет использовать свой интерфейс диспетчеризации событий для отправки событий обратно в javascript и будет прокачивать сообщения Windows в качестве побочного эффекта. Как только события Mozilla полностью отправляются, он возвращается к главному циклу событий.

Когда Mozilla отправляет сообщения Windows, это не включает дополнительную обработку, выполняемую циклом событий приложения - IsDialogMessage (), TranslateMessage (), PreTranslateMessage () или любая другая предварительная обработка пропускаются, когда Mozilla попадает в это состояние , Поэтому симптомы включают нажатия клавиш табуляции, вставляемые в виде символа вместо того, чтобы использоваться для навигации по диалогу, горячие клавиши клавиатуры, которые время от времени игнорируются, или время от времени пропускаемая пользователем предварительная обработка сообщений. Например, экран «Создание» в Outlook 2007/2010 время от времени теряет нажатия клавиш, поскольку для обработки ввода с клавиатуры он использует пользовательскую предварительную обработку сообщений.

См. https://bugzilla.mozilla.org/show_bug.cgi?id=582790 для исправления, которое решает проблему.

0 голосов
/ 16 июля 2009

Я заметил, что вы реализовали всю совместимость самостоятельно. Можете ли вы попробовать это с проектом GeckoFX и посмотреть, если вы получите ту же ошибку? Я использую этот проект на работе и еще не сталкивался с какими-либо проблемами.

...