Использование CGEventTapCreate Trouble с параметрами в Swift

Я пытаюсь перехватить нажатия клавиш с помощью CGEventTapCreate и т. Д. В Swift. Я хочу сделать это так, чтобы, когда мой малыш использовал программу Mac, я мог ограничить, какие клавиши что-то делают. Я ценю, что мне нужно включить вспомогательные технологии, чтобы заставить CGEventTap работать

У меня проблемы с пониманием того, что мне нужно сделать в Swift, чтобы получить последний параметр в вызове. По сути, я не понимаю часть документации в документации кварцевого события

В частности, последний параметр, который описывается

refcon: указатель на пользовательские данные. Этот указатель передается в функцию обратного вызова, указанную в параметре обратного вызова.

Вот мой код пропускает последний параметр из вызова

@IBAction func interceptKeyboard(sender: NSButton) {


    CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMask((kCGEventKeyDown) | (kCGEventKeyUp)), MyCallBack: kCGHIDEventTap, )

}

func MyCallBack(myLocation:CGEventTapLocation) -> Void{
    //do Nowt
}

1 ответ

Решение

Некоторое время назад, но я думаю, что когда вы смотрите на тип CGEventTapCallback, вы видите, что это CFunctionPointer:

typealias CGEventTapCallBack = CFunctionPointer<((CGEventTapProxy, 
CGEventType, CGEvent!, UnsafeMutablePointer<Void>) -> Unmanaged<CGEvent>!)>

В настоящее время вы не можете создать их в Swift, поэтому вам нужно окунуться в target-c, создать там функцию, которая затем может вызвать эквивалентную функцию в Swift, см. Здесь:

Обёртка Objective C для CFunctionPointer для быстрого закрытия

Я закончил писать весь этот материал в Objective-C...

Другие вопросы по тегам