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ć?
źródło
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.exe
do x64dbg, analizując problem, a następnie łatając kod za pomocą debugera (instrukcje poniżej).To, co się dzieje,
osk.exe
polega 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.exe
zatrzymanie 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.exe
dla 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 eax
Tuż przed wezwaniem jest instrukcjaSetForegroundWindow
. Wystarczy wymienićpush eax
zret
, zapisz sięosk.exe
i zastąpić oryginalnyosk.exe
z tego poprawionych wersji.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.
źródło