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

When tapping Quartz events, what is CGEventType 0x1D (29)?

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

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

使用触摸条和触控板时会产生问题事件。

我的具体问题是点击 trapping touch bar 软键,例如退出。当用户触摸 escape 时,将触发 0x1D 事件。如果此事件不是从事件回调中 return 编辑的,则永远不会触发 kCGEventKeyDown 和 kCGEventKeyUp 事件。如果此事件被 return 编辑,则后续事件将被触发,就像传统键盘上的按钮一样。

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;
     }
}

显然,我总是可以盲目地 return 这种类型的事件,但我更愿意了解此事件代表什么以及它的 CGEventRef 中有哪些可用信息。

有时像这样的东西在头文件中 "hidden"。如果您查看 NSEvent.h(CGEventTypeNSEventType 映射到相同的值),您会发现您的值:

// 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...

所以 29 是一个 "gesture" 事件。