Использование 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...