Вопрос

Недавно я приобрел Волшебную Мышь.Это фантастика и полный потенциал.К сожалению, этому серьезно мешает поддержка программного обеспечения.Я хочу это исправить.Я провел довольно много исследований, и на данный момент это мои выводы относительно цепочки событий:

  1. Magic Mouse отправляет в систему полные события мультитач.
  2. События мультитач обрабатываются в MultitouchSupport.framework (Carbon)
  3. События интерпретируются в фреймворке и отправляются в систему как обычные события
    • Когда вы прокручиваете одним пальцем, он отправляет фактические события колеса прокрутки.
    • Когда вы проводите двумя пальцами, он отправляет событие swipe.
  4. Никакие события NSTouch не отправляются в систему.Вы не можете использовать NSTouch API для взаимодействия с мышью.

После того, как я обнаружил все вышеперечисленное, я разобрал файл MultitouchSupport.framework и, немного погуглив, выяснил, как вставить собственный обратный вызов в цепочку, чтобы получать необработанные данные о событии касания.Если вы перечислите список устройств, вы можете подключить для каждого устройства (трекпад и мышь).Это открытие позволило бы нам создать платформу для использования мультитач мыши, но только в одном приложении.Смотрите мой пост здесь: Необработанное Мультитач-отслеживание.

Я хочу добавить новую функциональность к мыши по всему система, а не просто одно приложение.

В попытке сделать это, я выяснил, как использовать Нажатия на события чтобы узнать, позволит ли мне нажатие события самого низкого уровня получить необработанные данные, интерпретировать их и отправить вместо них мои собственные события.К сожалению, это не тот случай.Нажатие события, даже на уровне HID, по-прежнему является шагом выше того, где входные данные интерпретируются в MultitouchSupport.framework.

Смотрите мою попытку нажатия на событие здесь: Нажатие события - Попытка Мультитач в необработанном виде.
Интересное замечание на стороне:при получении события мультитач, такого как свайп, выбирается регистр по умолчанию и выводится номер события 29.В заголовке указано 28 как максимальное значение.

Переходя к моему вопросу, теперь, когда у вас есть вся информация и вы увидели, что я пробовал:каков был бы наилучший подход к расширению функциональности Magic Mouse?Я знаю, что мне нужно вставить что-то на достаточно низком уровне, чтобы получить входные данные до того, как они будут обработаны и отправлены предопределенные события.Итак, чтобы свести все к вопросам из одного предложения:

  • Есть ли какой-нибудь способ переопределить обратные вызовы по умолчанию, используемые в MultitouchSupport.framework?
  • Нужно ли мне писать kext и обрабатывать все входящие данные самостоятельно?
  • Возможно ли написать kext, который находится на Наверх из kext, который сейчас обрабатывает входные данные и фильтрует их после того, как kext выполнил всю тяжелую работу?

Моя первая цель - иметь возможность отправлять событие нажатия средней кнопки, если при нажатии на устройство находятся два пальца.Очевидно, что можно было бы сделать гораздо, гораздо больше, но на данный момент это кажется хорошей идеей, к которой стоит стремиться.

Заранее спасибо!

-Састира

Это было полезно?

Решение

Чем то, что происходит в MultitouchSupport.framework, отличается от Magic Mouse и стеклянного трекпада?Если он основан на свойствах устройства IOKit, я подозреваю, что вам понадобится KEXT, который эмулирует трекпад, но на самом деле взаимодействует с мышью.У Apple есть некоторая документация по программированию ядра Darwin и, в частности, по расширениям ядра:

(Лично мне бы понравилось что-то, что позволяло бы увеличивать изображение щепоткой и больше жестов свайпа / кнопки;как бы то ни было, Magic Mouse является функциональным улучшением по сравнению с четырьмя кнопками Mighty Mouse и [хотя и постоянно перегружающим] 2D-колесом прокрутки. Обновить:в прошлом году я написал Кунжутное Печенье чтобы сделать именно это, и для этого НЕ нужен kext (всего неделя или две, глядя на шестнадцатеричные дампы :-) Смотрите мой другой ответ для подробностей и исходного кода.)

Другие советы

Извините, я забыл обновить этот ответ, но в итоге я выяснил, как внедрить события мультитач и жестов в систему из пользовательского интерфейса через Услуги по организации мероприятий Quartz.Я не уверен, насколько хорошо он пережил обновление Lion, но вы можете ознакомиться с базовым исходным кодом по адресу https://github.com/calftrail/Touch

Для этого требуется два взлома:используя Частное Мультитач-фреймворк для получения входных данных устройства и ввода недокументированный CGEvent структурирует сервисы событий Quartz.Было невероятно интересно выяснить, как это осуществить, но в наши дни я рекомендую просто купить Magic Trackpad :-P

Я внедрил проверяемую концепцию настраиваемой оболочки событий пользовательского пространства с несколькими касаниями.

Вы можете прочитать об этом здесь: http://aladino.dmi.unict.it/?a=multitouch (смотрите в Промежуточная машина)

-- всего наилучшего

Если вы дойдете до этого момента, возможно, вам захочется рассмотреть возможность среднего щелчка тремя пальцами мыши вместо двух.Я думал об этой проблеме со средним щелчком мыши с magic mouse, и я заметил, что я часто оставляю свой 2-й палец на мыши, даже если я нажимаю только для щелчка левой кнопкой мыши.Таким образом, щелчок "двумя пальцами" может быть ошибочно принят за одиночный щелчок левой кнопкой мыши, и это также потребовало бы от пользователя больше усилий, чтобы всегда держать 2-й палец подальше от мыши.Поэтому, если это возможно обнаружить, три пальца будут вызывать меньше путаницы и головной боли.Интересно, откуда возьмется первое решение для "нажатия средней кнопки", так как я очень хочу, чтобы моя функция отображения среднего щелчка вернулась :) Желаю удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top