点击Quartz事件时,CGEventType 0x1D(29)是什么?

Dus*_*son 3 macos cocoa objective-c quartz-core

在处理Quartz事件时,我似乎找不到关于0x1D,29是什么以及如何处理事件的任何文档。

我在这里查看过各种头文件... https://developer.apple.com/documentation/coregraphics/cgeventtype?language=objc

使用触摸栏和触控板时会产生相关事件。

我的特定问题是点击陷阱键盘上的软键,如转义。当用户触摸转义时,将触发一个0x1D事件。如果未从事件回调中返回此事件,则永远不会触发kCGEventKeyDown和kCGEventKeyUp事件。如果返回此事件,则将触发后续事件,就像传统键盘上的按钮一样。

eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);

//No touch bar soft key events will ever fire
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type,  CGEventRef event, void *refcon) {
     if(type == 0x1D) {
          return NULL;
     }
}
Run Code Online (Sandbox Code Playgroud)

显然,我总是可以盲目地返回此类事件,但我宁愿了解该事件代表什么以及CGEventRef中可用的信息。

Jos*_*ell 5

有时这样的事情被“隐藏”在头文件中。如果查看NSEvent.h(CGEventType并将其NSEventType映射到相同的值),则会找到您的值:

// snip...
/* The following event types are available on some hardware on 10.5.2 and later */
NSEventTypeGesture NS_ENUM_AVAILABLE_MAC(10_5)       = 29,
NSEventTypeMagnify NS_ENUM_AVAILABLE_MAC(10_5)       = 30,
NSEventTypeSwipe   NS_ENUM_AVAILABLE_MAC(10_5)       = 31,
// snip...
Run Code Online (Sandbox Code Playgroud)

因此29是一种“姿态”事件。