1

Мне очень нравится использовать экранную клавиатуру, но есть неприятная проблема.

Если я использую Google Chrome (например) и сверну его с помощью экранной клавиатуры, то сверну экранную клавиатуру и открою другую программу, такую как блокнот (экранная клавиатура должна оставаться сфокусированной на блокноте), она развернет Google Chrome, поэтому нажать на блокнот снова.

Кажется, что экранная клавиатура управляет порядком открытых окон, и фокус на экранной клавиатуре остается в последнем окне, а не фокусируется на последнем окне, когда я нажимаю на него, чтобы максимизировать.

Как мне решить это?

2 ответа2

0

Я проследил эту чрезвычайно раздражающую ошибку еще до Windows XP, так что на самом деле это 17-летняя ошибка, которая до сих пор не исправлена (!).

Эта ошибка также обсуждается здесь, но поток заблокирован, и вы не можете обсуждать эту проблему дальше:

https://answers.microsoft.com/en-us/windows/forum/windows8_1-desktop/how-to-prevent-on-screen-keyboard-from-focus-on/2e6c7d6b-f59e-4b95-b37e-487ff33dbda3

Мне удалось создать простое исправление, загрузив osk.exe в x64dbg, проанализировав, в чем проблема, и затем исправив код с помощью отладчика (см. Инструкции ниже).

Происходит то, что osk.exe постоянно хранит последнее активное окно, чтобы сфокусировать это окно, когда мышь наводит курсор на OSK или пользователь активирует OSK. При этом все время сохраняется фокус на последнем активном окне, что гарантирует, что при вводе с помощью OSK ввод идет так, как должен.

Проблема в том, что osk.exe перестает хранить активное окно, когда OSK свернут.

Это ошибка.

Теперь, когда вы восстанавливаете свернутый OSK, у него амнезия, и он запоминает только последнее активное окно до того, как оно было свернуто. Так что теперь оно будет фокусировать это старое окно вместо предыдущего реального активного окна.

"Исправление", которое я использовал, состояло в том, чтобы просто не допустить, чтобы OSK когда-либо заставляла фокусироваться на любом окне. Для этого исправления нужно только пропатчить один байт в osk.exe , и именно поэтому я выбрал его. В противном случае любой другой патч был бы чрезвычайно сложным.

В x64dbg вы просто ищете все ссылки на SetForegroundWindow . Есть только два вызова этого метода Win32. Первое упоминание - это патч. Перед вызовом push eax есть инструкция SetForegroundWindow . Просто замените push eax на ret , сохраните в osk.exe и замените оригинальный osk.exe на эту исправленную версию.

x64dbg вид osk.exe

Задача решена.

Это не 100% решение, потому что удобство автоматической активации OSK потеряно, но все же лучше без первоначального раздражения. Вместо этого автоактивация может быть восстановлена с помощью AutoHotKey.

Оставьте сообщение здесь, и я опубликую сценарий, если кому-то понадобится. С помощью скрипта patch + AHK у вас есть полностью работающий OSK без раздражающей оригинальной ошибки.

0

Искал то же самое, наткнулся на это.

https://www.sevenforums.com/general-discussion/263571-unwanted-behavior-screen-keyboard-bug.html

Видимо ошибка известна как минимум с 2013 года. Я не думаю, что есть исправление готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .