Magic Mouse의 기능 확장:kext가 필요합니까?
-
13-09-2019 - |
문제
최근 매직마우스를 구입했습니다.그것은 환상적이고 잠재력이 가득합니다.불행히도 소프트웨어 지원으로 인해 심각한 방해를 받고 있습니다.나는 그것을 고치고 싶다.저는 상당히 많은 연구를 수행했으며 지금까지 이벤트 체인에 관해 제가 알아낸 결과는 다음과 같습니다.
- Magic Mouse는 전체 멀티터치 이벤트를 시스템으로 보냅니다.
- 멀티터치 이벤트는 MultitouchSupport.framework(Carbon)에서 처리됩니다.
- 이벤트는 프레임워크에서 해석되어 시스템에 일반 이벤트로 전송됩니다.
- 한 손가락으로 스크롤하면 실제 스크롤 휠 이벤트가 전송됩니다.
- 두 손가락으로 스와이프하면 스와이프 이벤트가 전송됩니다.
- 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의 4개 버튼과 [항상 막히기는 하지만] 2D 스크롤 휠의 기능적 다운그레이드입니다. 업데이트:작년에 내가 썼어 세사마우스 그렇게 하려면 kext가 필요하지 않습니다(1~2주만 16진수 덤프를 쳐다보세요 :-) 자세한 내용과 소스 코드에 대한 다른 답변을 참조하세요.)
다른 팁
죄송합니다. 이 답변을 업데이트하는 것을 잊어버렸지만 결국 사용자 영역에서 멀티터치 및 제스처 이벤트를 시스템에 삽입하는 방법을 알아냈습니다. 석영 이벤트 서비스.Lion 업데이트에서 얼마나 잘 살아남았는지 잘 모르겠지만 다음에서 기본 소스 코드를 확인할 수 있습니다. https://github.com/calftrail/Touch
두 가지 해킹이 필요합니다.사용하여 사적인 장치 입력을 얻고 삽입하는 멀티터치 프레임워크 문서화되지 않은 CGEvent 구조를 Quartz 이벤트 서비스로 변환합니다.어떻게 풀어낼지 궁리하는 게 엄청나게 재미있었는데 요즘은 그냥 매직트랙패드 구매를 추천드려요 :-P
사용자 공간 사용자 정의 가능한 멀티 터치 이벤트 래퍼에 대한 개념 증명을 구현했습니다.
여기에서 이에 대해 읽을 수 있습니다. http://aladino.dmi.unict.it/?a=멀티터치 (을 참조하십시오 웨이백머신)
- 모두 최고
해당 지점에 도달하면 가운데 클릭이 마우스의 두 손가락 대신 세 손가락으로 수행되는 것을 고려할 수 있습니다.저는 매직 마우스의 가운데 클릭 문제에 대해 생각해 본 적이 있으며, 왼쪽 클릭만 할 때에도 두 번째 손가락을 마우스 위에 두는 경우가 종종 있다는 것을 알게 되었습니다.따라서 "두 손가락" 클릭은 단일 왼쪽 클릭으로 오해될 수 있으며, 사용자는 항상 두 번째 손가락을 마우스에서 떼야 하는 데 더 많은 노력이 필요합니다.따라서 감지가 가능하다면 세 손가락이 혼란과 두통을 덜 유발할 것입니다.중간 클릭 노출 기능이 반환되기를 바라기 때문에 첫 번째 "가운데 버튼 클릭" 솔루션이 어디서 나올지 궁금합니다. :) 행운을 빕니다.