在Objective-C中,我过去通过将其基于以下CoreGraphics调用来实现空闲计时器:

CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType);

现在,使用相同的基本调用快速进行操作,如下所示:
CGEventSourceSecondsSinceLastEventType(CGEventSourceStateID.CombinedSessionState, CGEventType.MouseMoved)

在检查了头文件之后,例如在其中定义了 CGEventType 的地方,我找不到提到任何常量的内容,这些常量可以执行我在ObjC实现中可以执行的形式。

现在,我可以通过查找常量的值并像这样处理它来解决该问题,但我强烈希望不要这样做。我宁愿改为使用 IOKit 进行重写。 看起来它基本上被定义为(〜0),但是如前所述,我宁愿不像那样对其进行硬编码。

最佳答案

由于~0定义是头文件#define(在CGEventTypes.h中),因此不太可能更改,因为这样做会破坏二进制兼容性。硬编码该值应该是安全的。

因此,问题在于获取表示kCGAnyInputEventType(aka ~0)的CGEventType。

这是一种表示类型安全的合理方式:

let anyInputEventType = CGEventType(rawValue: ~0)!
CGEventSourceSecondsSinceLastEventType(CGEventSourceStateID.CombinedSessionState, anyInputEventType)

07-26 09:30