Cocoa中的系统级密钥模拟

时间:2015-04-15 17:35:47

标签: macos cocoa

我正在开发适用于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))

注意:应用程序不是沙盒。

0 个答案:

没有答案