Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Cocoa中的系统级密钥模拟_Macos_Cocoa - Fatal编程技术网

Macos Cocoa中的系统级密钥模拟

Macos Cocoa中的系统级密钥模拟,macos,cocoa,Macos,Cocoa,我正在为OSX 10.10(swift)开发Mac应用程序。有一个功能具有迷你虚拟键盘,需要大量的键盘按键模拟 (任何事件都会按顺序生成数十次按键模拟) 目前我正在使用CGEvent中的此方法 CGEventCreateKeyboardEvent(source: CGEventSource!, virtualKey: CGKeyCode, keyDown: Bool) 但是它非常慢。(我可以看到模拟一个接一个地发生) 我特别期待着,使用低级别的系统调用来完成这项工作,以便在时间范围内获得更好

我正在为OSX 10.10(swift)开发Mac应用程序。有一个功能具有迷你虚拟键盘,需要大量的键盘按键模拟
(任何事件都会按顺序生成数十次按键模拟)

目前我正在使用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))

注意:应用程序没有沙盒。

“但速度非常慢”这可能是线程问题吗?显示实际代码和使用它的上下文…@matt我已经更新了问题