Недавно я приобрел Magic Mouse. Это фантастика и полный потенциал. К сожалению, это серьезно затрудняет поддержка программного обеспечения. Я хочу это исправить. Я провел довольно много исследований, и это мои выводы о цепочке событий до сих пор:
- Magic Mouse отправляет в систему все события мультитач.
- События Multitouch обрабатываются в MultitouchSupport.framework(Carbon)
- События интерпретируются в структуре и отправляются в систему как обычные события
- При прокрутке одним пальцем он отправляет фактические события колесика прокрутки.
- Когда вы проведите пальцем двумя пальцами, он отправляет событие салфетки.
- В систему не отправляются события NSTouch. Вы не можете использовать API NSTouch для взаимодействия с мышью.
После того, как я обнаружил все вышеперечисленное, я разобрал файл MultitouchSupport.framework и, с некоторым поиском в Google, выяснил, как вставить обратный вызов моего собственного в цепочку, чтобы получить данные о сыром сенсорном событии. Если вы перечислите список устройств, вы можете подключиться к каждому устройству (трекпад и мышь). Это открытие позволило бы нам создать структуру для использования мультитач на мыши, но только в одном приложении. См. Мой пост здесь: Отслеживание необработанных мультитачей.
Я хочу добавить новые функции к мыши по всей системе , а не только к одному приложению.
В попытке сделать это я выяснил, как использовать Event Taps, чтобы увидеть, может ли кран событий самого низкого уровня позволить мне получить сырые данные, интерпретировать его и отправлять свои собственные события на свое место. К сожалению, это не случай. Ключ события, даже на уровне HID, все еще является шагом выше, где ввод интерпретируется в MultitouchSupport.framework.
Смотрите мою попытку подключения к событию здесь: Event Tap - Попытка Raw Multitouch.
Интересное примечание: когда принимается событие мультитач, например, салфетки, случай по умолчанию удаляется и выводит номер события 29. В заголовке отображается 28 как максимальное.
На мой вопрос, теперь, когда у вас есть вся информация и я видел то, что я пробовал: какой был бы лучший подход к расширению функциональности Magic Mouse? Я знаю, что мне нужно вставить что-то на достаточно низком уровне, чтобы получить ввод до того, как он обработан, и будут отправлены предопределенные события. Итак, чтобы довести до одного предложения вопросы:
- Есть ли способ переопределить обратные вызовы по умолчанию, используемые в MultitouchSupport.framework?
- Нужно ли мне писать kext и обрабатывать все входящие данные?
- Можно ли написать kext, который находится на top kext, который обрабатывает вход сейчас, и фильтрует его после того, как kext выполнил всю тяжелую работу?
Моя первая цель состоит в том, чтобы иметь возможность отправить среднее нажатие кнопки мыши, если при нажатии на него два пальца. Очевидно, что гораздо больше, что можно сделать, но сейчас это похоже на хорошую вещь, чтобы стрелять, пока.
Спасибо заранее!
-Sastira