Okej, więc przeprowadziłem badania i udało mi się odnieść sukces.
Po namyśle doszedłem do wniosku, że nie wiem, jak to działa :-) Po prostu tak! :-)
Poprzednio w „ Przydatne :) Zabawa ”:
W skrócie, touchpad Synaptics wysyła ( SendMessage()lub PostMessage()nie zadał sobie trudu, aby to wskazać) właściwe komunikaty okna ( WM_MOUSEWHEEL) do okna VMware, ale tak naprawdę powinien to robić SendInput(), bezpośrednio emulując fizyczną mysz. Wygląda na to, że istniała opcja kontrolowania zachowania sterowników (lub ściślej programu trybu użytkownika SynTPEnh.exe) za pomocą pliku
tp4table.dat. Niestety, ta opcja w jakiś sposób nie jest włączona w moich sterownikach (choć taki plik jest w pliku wykonywalnym).
Więc zrobiłem następujące - po prostu wstrzyknąłem proces .dlldo okna VMware (mam nadzieję, że jest bezpieczny, a także mam nadzieję, że nie jest to ten sam proces, który wykonuje maszynę wirtualną), podklasowałem procedurę okna (co oznacza przechwycone komunikaty okna) i przetłumaczyłem „niewłaściwe” za pomocą SendInput().
Ponadto zauważono, że następująca poprawka jest warta zastosowania nawet w moim rozwiązaniu: http://blog.alexou.net/2010/07/scrolling-in-gtk-apps-with-synaptics-driver/ .
Tak więc kod źródłowy i pliki wykonywalne (obsługują tylko stację roboczą, czytaj dalej Player, w „AKTUALIZACJI”) - zapytaj w komentarzu, jeśli czegoś nie znalazłeś - są na https://www.dropbox.com/s/ gucmyo35heha6g2 / vmware_scroll.zip? dl = 0 .
WAŻNA UWAGA: uruchom odpowiedni plik wykonywalny, gdy uruchomiona jest maszyna wirtualna.
KOLEJNA GŁÓWNA UWAGA: Nie ruszaj się hook.dlli *.exejest po włączeniu przewijania. Jeśli zaczniesz vmware_scroll_stop.exez innej lokalizacji, nie zostanie odciążone .dll(tj. Wyłączy przewijanie).
AKTUALIZACJA : Istnieje ulepszona wersja
(została ulepszona przez Anthony'ego Prieura, wielkie dzięki niemu!), Która obsługuje również VMware Player. Dostępny jest również program wywodzący się od tego o nazwie
VMWareTrackPadScroller
z prostym interfejsem użytkownika.
UWAGA: Niestety, nie będzie wersji obsługującej przewijanie w poziomie. Chodzi o to, że istnieje pomysł na rozwiązanie, ale odrzuciłem go jako zbyt brudny. Aby wykonać zadanie, należy zaczepić (w SynTPEnh.exe) API GetClassNameW (), aby zmodyfikować nazwy klas okien VMware (są to „VMware.GuestWindow” i „MKSEmbedded”) lub wcsicmp (), aby zawsze zwracały „nierównany” gdy jednym z argumentów jest jeden z wymienionych ciągów. Myślę, że to brudne rozwiązanie, przynajmniej z punktu widzenia wydajności (to w rzeczywistości słaby argument, ponieważ ograniczenie wydajności byłoby minimalne). W każdym razie obecne rozwiązanie jest dopuszczalne, jak sądzę, ponieważ nie zawsze masz urządzenie z funkcją przewijania w poziomie i lepiej jest przyzwyczaić się do życia bez tego luksusu niż cierpienia w biedzie. BTW,Shift+Vertical Scroll zrobić przewijanie w poziomie.