使用CGEventTapCreate在Swift中使用参数麻烦

时间:2014-10-31 11:13:28

标签: macos swift quartz-graphics

我试图在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
}

1 个答案:

答案 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中编写了所有这些内容......