我试图在Swift中使用CGEventTapCreate等来捕获按键。我想这样做,以便当我的孩子使用Mac程序时,我可以限制哪些键做某事。我感谢我需要启用辅助技术才能使CGEventTap正常工作
我无法理解在Swift中需要做什么才能获得调用中的最终参数。基本上,我不理解quartz events documentation
中的部分文档具体是
描述的最终参数refcon:指向用户定义数据的指针。传入此指针 回调参数中指定的回调函数。
这是我的代码缺少调用的最后一个参数
@IBAction func interceptKeyboard(sender: NSButton) {
CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMask((kCGEventKeyDown) | (kCGEventKeyUp)), MyCallBack: kCGHIDEventTap, )
}
func MyCallBack(myLocation:CGEventTapLocation) -> Void{
//do Nowt
}
答案 0 :(得分:1)
一段时间以前,但我想当你看一下CGEventTapCallback的类型时,你会发现它是一个CFunctionPointer:
typealias CGEventTapCallBack = CFunctionPointer<((CGEventTapProxy,
CGEventType, CGEvent!, UnsafeMutablePointer<Void>) -> Unmanaged<CGEvent>!)>
目前你无法在Swift中创建这些,所以你必须深入到objective-c,在那里创建一个函数,然后可以在Swift中调用一个等效的函数,见这里:
Objective-C Wrapper for CFunctionPointer to a Swift Closure
我最终在Objective-C中编写了所有这些内容......