Swift和我的Idle计时器实现(缺少CGEventType)

时间:2015-08-11 14:01:03

标签: objective-c macos swift cocoa appkit

在objective-c中我曾经通过以下CoreGraphics调用来实现我的空闲计时器:

CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType);

现在快速地使用相同的基本呼叫,它看起来像:

CGEventSourceSecondsSinceLastEventType(CGEventSourceStateID.CombinedSessionState, CGEventType.MouseMoved)

在检查了头文件之后,例如 CGEventType 的定义,我找不到任何以我在ObjC实现中可以做的形式做任何事情的常量。

现在我可以通过查找常量的值来解决这个问题并且这样做,但我强烈不愿意这样做。我宁愿使用 IOKit 重写。 看起来它基本上定义为(~0),但如前所述,我宁愿不像那样硬编码。

1 个答案:

答案 0 :(得分:3)

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

所以问题是获得一个代表kCGAnyInputEventType的CGEventType(又名~0)。

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

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