Jak zapobiec minimalizacji przez klawiaturę ekranową ostatniego okna

1

Bardzo lubię używać klawiatury ekranowej, ale jest irytujący problem.

Jeśli korzystam z Google Chrome (na przykład) i minimalizuję go za pomocą klawiatury ekranowej, to zminimalizuj klawiaturę ekranową i otwórz inny program, taki jak notatnik (klawiatura ekranowa powinna pozostać skupiona na notatniku), to maksymalizuje Google Chrome, więc mam aby ponownie kliknąć notatnik.

Wygląda na to, że klawiatura ekranowa kontroluje kolejność otwierania okien, a ostrość na klawiaturze ekranowej w ostatnim oknie minimalizuje się, zamiast skupiać się na ostatnim oknie, gdy kliknę je, aby zmaksymalizować.

Jak to rozwiązać?

Inny wymiar
źródło

Odpowiedzi:

0

Prześledziłem ten niezwykle irytujący błąd aż do systemu Windows XP, więc w rzeczywistości jest to 17-letni błąd, który wciąż nie został naprawiony (!).

Ten błąd jest również omawiany tutaj, ale wątek jest zamknięty i nie można dalej omawiać tego problemu:

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

Udało mi się stworzyć prostą poprawkę, ładując osk.exedo x64dbg, analizując problem, a następnie łatając kod za pomocą debugera (instrukcje poniżej).

To, co się dzieje, osk.exepolega na ciągłym zapisywaniu ostatniego aktywnego okna w celu zogniskowania tego okna, gdy mysz przesuwa się nad OSK lub użytkownik aktywuje OSK. Dzięki temu skupia się na ostatnim aktywnym oknie przez cały czas, co zapewnia, że ​​podczas pisania za pomocą OSK dane wejściowe idą tam, gdzie powinny.

Problemem jest osk.exezatrzymanie zapisywania aktywnego okna, gdy OSK jest zminimalizowane.

To jest błąd.

Teraz, kiedy przywracasz zminimalizowany OSK, ma amnezję i pamięta tylko ostatnie aktywne okno sprzed minimalizacji. Teraz skupi się na tym starym oknie, zamiast na poprzednim prawdziwym aktywnym oknie.

„Poprawka”, której użyłem, polegała po prostu na tym, aby OSK nie zmuszał żadnego okna do skupienia się. Musisz załatać tylko jeden bajt osk.exedla tej poprawki i dlatego ją wybrałem. Każda inna łata byłaby w przeciwnym razie niezwykle skomplikowana.

W x64dbg po prostu wyszukujesz wszystkie odniesienia do SetForegroundWindow. Istnieją tylko dwa wywołania tej metody Win32. Pierwszy odnośnik to ten, który należy załatać. push eaxTuż przed wezwaniem jest instrukcja SetForegroundWindow. Wystarczy wymienić push eaxz ret, zapisz się osk.exei zastąpić oryginalny osk.exez tego poprawionych wersji.

Widok x64dbg pliku osk.exe

Problem rozwiązany.

To nie jest rozwiązanie w 100%, ponieważ utracono wygodę automatycznej aktywacji OSK, ale nadal jest to lepsze bez pierwotnej irytacji. Zamiast tego można przywrócić automatyczną aktywację za pomocą AutoHotKey.

Zostaw wiadomość tutaj, a ja opublikuję skrypt, jeśli ktoś będzie go potrzebować. Dzięki poprawce + skryptowi AHK masz w pełni działający OSK bez irytującego oryginalnego błędu.

Kacper
źródło