Итак, я провел исследование и смог добиться успеха.
Подумав, я пришел к выводу, что не знаю, как это работает :-) Просто так! :-)
Ранее в « Полезном :) Веселье »:
Вкратце, тачпад Synaptics отправляет (SendMessage()
или PostMessage()
, не удосужившись точно определить) сообщения правого окна (WM_MOUSEWHEEL
) в окно VMware, но на самом деле он должен использовать SendInput()
, напрямую эмулируя физическую мышь.
Кажется, что была возможность контролировать поведение драйверов (или, точнее, программы SynTPEnh.exe
пользовательском режиме) с помощью файла tp4table.dat
. К сожалению, эта опция почему-то не включена в моих драйверах (хотя в исполняемом файле есть такая строка).
Итак, я сделал следующее - просто ввел .dll
в оконный процесс VMware (я надеюсь, что это безопасно, а также надеюсь, что это не тот же процесс, который выполняет ВМ), подклассовую оконную процедуру (имеется в виду перехваченные оконные сообщения) и перевел "неправильно" те, которые используют SendInput()
.
Также было отмечено, что следующее исправление стоит применить даже с моим решением: http://blog.alexou.net/2010/07/scrolling-in-gtk-apps-with-synaptics-driver/.
Итак, исходный код и исполняемые файлы (они только поддерживают Workstation, подробнее об Player, читайте в разделе "ОБНОВЛЕНИЕ") - спросите в комментарии, если вы что-то не нашли - на https://www.dropbox.com/s/gucmyo35heha6g2/vmware_scroll.zip?dl = 0.
ОСНОВНОЕ ЗАМЕЧАНИЕ: запустите соответствующий исполняемый файл, когда виртуальная машина работает.
ДРУГОЕ ОСНОВНОЕ ЗАМЕЧАНИЕ : Не перемещайте hook.dll
и *.exe
после включения прокрутки. Если вы запустите vmware_scroll_stop.exe
из другого места, он не загрузит .dll
(т.е. отключит прокрутку).
ОБНОВЛЕНИЕ: есть улучшенная версия (она была улучшена Энтони Приером, большое ему спасибо!), Которая также поддерживает VMware Player. Также доступна программа, производная от VMWareTrackPadScroller, с простым пользовательским интерфейсом.
ПРИМЕЧАНИЕ. К сожалению, не будет версии с горизонтальной прокруткой. Дело в том, что есть идея решения, но я отверг ее как слишком грязную. Для выполнения этой задачи нужно подключить (в SynTPEnh.exe) API GetClassNameW () для изменения имен классов окон VMware (они являются "VMware").GuestWindow "и" MKSEmbedded ") или wcsicmp () всегда возвращают" не равно ", когда один из аргументов является одной из упомянутых строк. Я думаю, что это грязное решение с точки зрения производительности, по крайней мере (это на самом деле слабый аргумент, поскольку снижение производительности будет минимальным). В любом случае, я думаю, что текущее решение приемлемо, поскольку у вас не всегда есть устройство с горизонтальной прокруткой, и лучше привыкнуть жить без этой роскоши, чем страдать в нищете. Кстати, в Chrome/Chromium у вас есть Shift+Vertical Scroll
чтобы сделать горизонтальную прокрутку.