我正在开发适用于OSX 10.10的Mac App(在swift中)。有一个功能是迷你虚拟键盘,需要大量的键盘按键模拟 (任何事件都会按顺序产生数十个按键模拟)。
目前我在CGEvent中使用这种方法
CGEventCreateKeyboardEvent(source: CGEventSource!, virtualKey: CGKeyCode, keyDown: Bool)
但它很慢。 (我可以逐个看到模拟发生)
我特别期待,使用低级系统调用来完成这项工作,以便在时间上有更好的结果。
任何人都可以推荐一些资源来学习/知道如何做到这一点。或者有没有开源库?
以下是我的代码
class func postKey(key : Int , flags : CGEventFlags!) {
let source = CGEventSourceCreate(CGEventSourceStateID(kCGEventSourceStateCombinedSessionState)).takeRetainedValue()
let downKey = CGEventCreateKeyboardEvent(source, UInt16(key), true).takeRetainedValue()
let upKey = CGEventCreateKeyboardEvent(source, UInt16(key), false).takeRetainedValue()
if flags != nil {
CGEventSetFlags(downKey, flags);
}
let loc = CGEventTapLocation(kCGHIDEventTap)
CGEventPost(loc, downKey)
CGEventPost(loc, upKey)
}
按顺序调用它,如下例
self.postKey(kVK_ANSI_A, flags: CGEventFlags(kCGEventFlagMaskCommand))
self.postKey(kVK_ANSI_C, flags: CGEventFlags(kCGEventFlagMaskCommand))
self.postKey(kVK_ANSI_V, flags: CGEventFlags(kCGEventFlagMaskCommand))
注意:应用程序不是沙盒。