문제

최근 매직마우스를 구입했습니다.그것은 환상적이고 잠재력이 가득합니다.불행히도 소프트웨어 지원으로 인해 심각한 방해를 받고 있습니다.나는 그것을 고치고 싶다.저는 상당히 많은 연구를 수행했으며 지금까지 이벤트 체인에 관해 제가 알아낸 결과는 다음과 같습니다.

  1. Magic Mouse는 전체 멀티터치 이벤트를 시스템으로 보냅니다.
  2. 멀티터치 이벤트는 MultitouchSupport.framework(Carbon)에서 처리됩니다.
  3. 이벤트는 프레임워크에서 해석되어 시스템에 일반 이벤트로 전송됩니다.
    • 한 손가락으로 스크롤하면 실제 스크롤 휠 이벤트가 전송됩니다.
    • 두 손가락으로 스와이프하면 스와이프 이벤트가 전송됩니다.
  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의 4개 버튼과 [항상 막히기는 하지만] 2D 스크롤 휠의 기능적 다운그레이드입니다. 업데이트:작년에 내가 썼어 세사마우스 그렇게 하려면 kext가 필요하지 않습니다(1~2주만 16진수 덤프를 쳐다보세요 :-) 자세한 내용과 소스 코드에 대한 다른 답변을 참조하세요.)

다른 팁

죄송합니다. 이 답변을 업데이트하는 것을 잊어버렸지만 결국 사용자 영역에서 멀티터치 및 제스처 이벤트를 시스템에 삽입하는 방법을 알아냈습니다. 석영 이벤트 서비스.Lion 업데이트에서 얼마나 잘 살아남았는지 잘 모르겠지만 다음에서 기본 소스 코드를 확인할 수 있습니다. https://github.com/calftrail/Touch

두 가지 해킹이 필요합니다.사용하여 사적인 장치 입력을 얻고 삽입하는 멀티터치 프레임워크 문서화되지 않은 CGEvent 구조를 Quartz 이벤트 서비스로 변환합니다.어떻게 풀어낼지 궁리하는 게 엄청나게 재미있었는데 요즘은 그냥 매직트랙패드 구매를 추천드려요 :-P

사용자 공간 사용자 정의 가능한 멀티 터치 이벤트 래퍼에 대한 개념 증명을 구현했습니다.

여기에서 이에 대해 읽을 수 있습니다. http://aladino.dmi.unict.it/?a=멀티터치 (을 참조하십시오 웨이백머신)

- 모두 최고

해당 지점에 도달하면 가운데 클릭이 마우스의 두 손가락 대신 세 손가락으로 수행되는 것을 고려할 수 있습니다.저는 매직 마우스의 가운데 클릭 문제에 대해 생각해 본 적이 있으며, 왼쪽 클릭만 할 때에도 두 번째 손가락을 마우스 위에 두는 경우가 종종 있다는 것을 알게 되었습니다.따라서 "두 손가락" 클릭은 단일 왼쪽 클릭으로 오해될 수 있으며, 사용자는 항상 두 번째 손가락을 마우스에서 떼야 하는 데 더 많은 노력이 필요합니다.따라서 감지가 가능하다면 세 손가락이 혼란과 두통을 덜 유발할 것입니다.중간 클릭 노출 기능이 반환되기를 바라기 때문에 첫 번째 "가운데 버튼 클릭" 솔루션이 어디서 나올지 궁금합니다. :) 행운을 빕니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top