Swift tapCreate()禁用后自动启用

时间:2018-12-10 23:11:47

标签: macos swift3

我用以下方法创建了水龙头:

 guard let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap,
                                               place: .headInsertEventTap,
                                               options: .defaultTap,
                                               eventsOfInterest: CGEventMask(eventMask),
                                               callback: myCGEventCallback,
                                               userInfo: nil) else {
                                               logger.info("failed to create event tap")
                                               exit(1)
                                             }

我的应用程序按预期运行。我的应用还可能在tapCreate()之后的任何时候锁定机器,如下所示:

let task = Process()
task.arguments = ["-suspend"]
task.launchPath = "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession"
task.launch()

使用上述代码进入登录屏幕并重新登录后,上面创建的水龙头将与此exit关闭。

在用户重新登录后,我找不到登录挂钩或重新创建我的tap的方法。在这种情况下如何重新启动tap

1 个答案:

答案 0 :(得分:0)

找到了一种在用户重新登录时获取通知的方法。只有在启动应用程序的用户重新登录时才会触发。在applicationDidFinishLaunching中,我添加了:

NSWorkspace.shared().notificationCenter.addObserver(self, selector: #selector(self.rebuildEventChains(aNotification:)), name: NSNotification.Name.NSWorkspaceSessionDidBecomeActive, object: nil);

具有要在登录时调用的函数:

func rebuildEventChains(aNotification : NSNotification){
    // re-enable the tap if is disabled
    // ...
}