Подтвердить что ты не робот

Расширение функциональности Magic Mouse: нужен ли мне kext?

Недавно я приобрел 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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

- все лучшее

Ответ 3

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

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

Ответ 4

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