Хотите поблагодарить автора блога - жмите здесь !
1 2 0
1 2 0

Нажмите на рекламный баннер выше, если хотите поблагодарить автора блога !
Написание каждой статьи заняло в сотни раз больше времени, чем один клик.

понедельник, января 05, 2015

Windows пропадание символов при наборе с клавиатуры из за самопроизвольных потерь фокуса окном

Недавно столкнулся с такой проблемой. При наборе, совершенно "рандомным" образом, часть букв "исчезала", вплоть до целых слов. Сначала грешил на то что слабый проц и сильную перегруженность своего ноута, на проблемы с прерываниями, но проблема оказалась не в том. Обратил внимание, что во время набора, окно вдруг может само по себе кратковременно стать "неактивным", и все что в это время набираешь "пропадает", потом фокус "сам по себе возвращается", либо иногда нужно кликнуть чтобы возвратился. Но при этом часть букв при наборе с клавиатуры "пропадает". Клавиатура тут понятно ни при чем. Прежде всего необходимо выяснить какая программа "отбирает фокус". Windows такой диагностики не дает, и по нету куча топиков "stealing focus windows", "потеря фокуса активным окном", "потеря фокуса окном firefox", "потеря фокуса текущего окна", "потеря фокуса активным приложением" итд, в большинстве случаев без решения, с рекомендациями "по одной убирать программы из автозапуска", перезапускать, проверять итд. В общем из серии "пилите шура гири".  Но все оказалось проще чем казалось - ниже мой опыт как я поборол "потерю фокуса приложением", а попутно еще и исправил проблему с XAMPP под windows.


Оказалось что есть программа. которая может помочь в обнаружении виновного. Взять ее можно вот тут: http://www.adminscope.com/downloads/window-focus-logger-gui/
Там две версии, одна с GUI, вторая командной строки. Если нужно отследить за долгий период (проблема возникает редко) то лучше использовать версию командной строки, и потом анализировать лог. Но у меня возникала часто, и больше подошла GUI версия. Инсталлировать ее не надо, только запустить, и потом выбрать время в течении которого она будет собирать статистику, и нажать "start".
Далее, как только возникло очередное "пропадание" (самопроизвольная потеря фокуса), смотрим в окошко указанной программы, и находим там название программы, которая "перехватывала фокус".
В моем случае это оказалась системная программа Windows wermgr.exe. Поиск по интернету показал что почти в половине случаев таких "потерь фокуса" "засвечивается" именно она. НО она не является причиной, это просто менеджер обработки ошибок. Почему майкрософт его так криво написал, что он в моменты запуска "забирает фокус", при этом на экране не появляясь, и создавая кучу проблем - это вопрос к майкрософт. Теоретически его можно попробовать просто отключить через "сервисы", но это будет неправильный путь, так как что то вызывает ошибку, которая и инициирует активацию wermgr.
Чтобы выяснить, что именно вызывает эту ошибку, которая и производит к запуску wermgr и последующему пропаданию фокуса и потере букв при наборе, далее нужно через панель управления Windows вызвать его "регистратор ошибок". Панель управления > Система и безопасность > Администрирование > Просмотр событий.
Далее, выбираем "приложения", и в списке событий, ищем какие ошибки возникали в то время, когда были зарегестрированы "перехваты фокуса" программой wermgr.exe. Собственно найдя их, Вы уже знаете кто виноват в возникшей проблеме. Далее. либо удалять "виноватого" либо переустанавливать, либо пытаться устранять другими методами. Самое противное - поиск причины проблемы мы уже проделали.
===Далее мой частный случай, касается только тех у кого на машине установлен XAMPP===
Изучение лога ошибок, показало что ошибка происходила в HTTPD, и выглядела вот так:
Имя сбойного приложения: httpd.exe, версия: 2.4.10.0, отметка времени: 0x53c79afa
Имя сбойного модуля: php5ts.dll, версия: 5.6.3.0, отметка времени 0x54640c2e
Код исключения: 0xc00000fd
Смещение ошибки: 0x00125b6e
Идентификатор сбойного процесса: 0x1268
Время запуска сбойного приложения: 0x01d02911a9432aea
Путь сбойного приложения: D:\xampp\apache\bin\httpd.exe
Путь сбойного модуля: D:\xampp\php\php5ts.dll
Код отчета: eb32d64d-9504-11e4-806e-91577fe4ac0c
Похожим образом у Вас будет выглядеть дагностика и если выновата другая программа. Тут мы видим, что ошибка возникает в httpd.exe, конкретно при загрузке php5ts.dll.
Тут я вспомнил, что у меня при отладке вэб сайтов под XAMPP частенько возникала ошибка "соединение прервано сервером до того как были переданы данные" и на экране "белое окно", при чем поиск причин ошибки в интернете результатов не дал, и я было с этим уже смирился. До этого и менял таймауты в настройках httpd, и в настройках php.ini, как рекомендовалось - все бестолку. Все равно периодически при обращении к серверу на основе XAMPP под которым установлена JOOMLA, возникала ошибка, "сервер прервал соединение", предложением обновить страницу и белым экраном.  Но оказалось что "вот она где" :) Хорошо что в самом начале не пошел по "простому пути" - отключить wermgr.exe :)
Дальнейший поиск по интернету, когда уже "знаешь чего ищешь" таки дал результат. Оказалось, что при использовании XAMPP под windows, нужно внести одну поправку в конфиг httpd, а конкретно в файле httpd-mpm.conf
добавить
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
</IfModule>
Точнее найти это место и между вышеуказанными открывающим и закривающим тэгом добавить строку  ThreadStackSize 8388608, которой там нет.
Подробнее тут:
http://sagip.ru/pages/apache_2_4_php_5_4_joomla_3_3_2_oshibka_php5ts_dl_c00000fd
После чего перезапустить httpd. Все, ошибка XAMPP под windows устранена. Теперь и окна самопроизвольно фокус не теряют, и буквы при наборе не пропадают, и XAMPP глючить перестал.
МОжно сказать одним махом троих побивахом" :)

Комментариев нет:

Отправить комментарий

Закрыть окно X
Пожалуйста, потратьте несколько секунд на поддержку блога и его автора
Нажмите на рекламную ссылку: Рекламная ссылка для поддержки блога, или на баннер вверху справа страницы.