https://developer.apple.com/documentation/coregraphics/quartz_event_services
Quartz Event Services
- MacOS의 event tap을 관리하는 기능 제공
- event tap은 low-level user input evets를 observing&altering 가능
#include <ApplicationServices/ApplicationServices.h>
CGEventMask eventMask = CGEventMaskBit(kCGEventLeftMouseDown);
LeftMouseDown: 마우스 왼쪽 버튼 누를 때
LeftMouseUp: 마우스 왼쪽 버튼 뗄 때
CFMachPortRef eventTap = CGEventTapCreate(
kCGHIDEventTap, // HID 레벨에서 이벤트를 감시
kCGHeadInsertEventTap, // 이벤트 탭의 우선순위 지정
kCGEventTapOptionListenOnly, // 이벤트를 수신만 함
eventMask, // 감지할 이벤트 유형 지정
myCGEventCallback, // 이벤트가 발생했을 때 호출되는 콜백 함수
nullptr // 사용자 정의 데이터 없음
);
CGEventTapCreate: event tap 생성
parameter:
- tap:
- 새로운 이벤트 탭의 위치를 지정합니다. CGEventTapLocation에 나열된 상수 중 하나를 전달해야 합니다. 루트 사용자로 실행되는 프로세스만이 HID(Human Interface Device) 이벤트가 윈도우 서버에 들어가는 지점에서 이벤트 탭을 설정할 수 있습니다. 다른 사용자의 경우 이 함수는 NULL을 반환합니다.
- place:
- 활성 이벤트 탭 목록에서 새 이벤트 탭의 배치를 지정합니다. CGEventTapPlacement에 나열된 상수 중 하나를 전달해야 합니다.
- options:
- 새 이벤트 탭이 수동 리스너인지 또는 활성 필터인지를 지정하는 상수를 전달합니다.
- eventsOfInterest:
- 관찰할 이벤트 집합을 지정하는 비트 마스크(bit mask)입니다. 가능한 이벤트 목록은 CGEventType에서 확인할 수 있습니다. 만약 이벤트 탭이 eventsOfInterest 매개변수에서 지정된 이벤트를 모니터링할 수 없는 경우, 해당 비트가 마스크에서 제거됩니다. 결과적으로 마스크가 비어있게 되면 이 함수는 NULL을 반환합니다.
- callback:
- 이벤트가 발생했을 때 호출되는 콜백 함수입니다. 이 함수는 이벤트 탭이 소스로 추가된 런 루프에서 호출됩니다. 콜백의 스레드 안전성은 런 루프 환경에 따라 정의됩니다. 콜백 함수에 대해 자세히 알아보려면 CGEventTapCallBack을 참조하세요.
- refcon:
- 사용자 정의 데이터를 가리키는 포인터입니다. 이 포인터는 callback 매개변수에서 지정된 콜백 함수에 전달됩니다.