글로벌 마우스는 코코아에서 이벤트를 옮겼습니다
-
06-07-2019 - |
문제
코코아에서 글로벌 마우스 이동 이벤트를 등록하는 방법이 있습니까? 탄소를 사용하여 이벤트에 등록 할 수있었습니다. InstallEventHandler()
, 그러나 코코아 동등한 것을 선호합니다. 나는 찾았다 NSNotificationCenter
이벤트이지만 공개 이벤트 이름이없는 것 같습니다 (개인 이벤트 이름이 있습니까?)
또는 사용 방법이 있습니다 NSTrackingArea
a clearColor
배경?
앱은 스노우 레오파드입니다.
해결책
Snowleopard에는 새로운 클래스 방법이 있습니다 NSEvent
원하는 것을 정확히 수행합니다. + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
. 당신은 원할 것입니다 mask = NSMouseMovedMask
.
다른 팁
stackoverflow에서 비슷한 질문이 이미 묻습니다.투명한 NSView 서브 클래스 핸들 마우스 이벤트를 만드는 방법은 무엇입니까?
요약하자면, 탠 스피어보기 방법은 작동하지 않았습니다. 석영 이벤트 탭이 최고의 답변 인 것 같습니다.
다음은 TAPS 작업에 대한 힌트입니다.
탭을 만듭니다
CGEventTapCreate
.
a) 위치 (첫 번째) 매개 변수의 경우 아마도 사용하고 싶을 것입니다.kCGSessionEventTap
.
b) 배치 (두 번째) 매개 변수의 경우 아마도 원할 것입니다.kCGHeadInsertEventTap
.
c) 이벤트 마스크 매개 변수의 경우 시도해보십시오(1 << kCGEventMouseMoved)
.런 루프 소스를 만듭니다
CFMachPortCreateRunLoopSource
, 이벤트 전달을 두 번째 매개 변수로 탭합니다.런 루프 소스를 런 루프에 추가하십시오. 메인 런 루프에 추가를 원한다고 가정하면 다음을 수행하십시오.
CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);
이벤트 탭을 활성화하십시오
CGEventTapEnable
마우스가 어디에 있든 추적하려면 cgeventtap을 원합니다. 코코아 등가는 없습니다. 응용 프로그램에서 추적하려면 왜 자신이 더 철저하게 그렇게 할 수 없는지 설명해야합니다.