Swift tapCreate () автоматически включить после отключения - PullRequest
0 голосов
/ 11 декабря 2018

Я создал кран с:

 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()

. После перехода на экран входа с вышеуказанным кодом и повторного входа в систему, созданный выше кран закрываетсяthis exit .

Мне не удалось найти хук входа в систему или способ воссоздания моего tap после того, как пользователь снова вошел в систему. Как я могу перезапустить tap вэтот сценарий?

1 Ответ

0 голосов
/ 11 декабря 2018

Нашел способ получить уведомление, когда пользователь снова входит в систему. Это срабатывает, только когда пользователь, запустивший приложение, снова входит в систему. В 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
    // ...
}
...