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 .dll
do 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.dll
i *.exe
jest po włączeniu przewijania. Jeśli zaczniesz vmware_scroll_stop.exe
z 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.