Swift Can';CGEventTapCreate

Swift Can';CGEventTapCreate,swift,xcode,macos,accessibility,cgeventtap,Swift,Xcode,Macos,Accessibility,Cgeventtap,我从命令行工具项目中main.swift下面的链接复制并粘贴了代码。 它构建时没有错误,但当我运行时,guard让eventTap=CGEventTapCreate。。。失败。我认为eventTap从CGEventTapCreate获得nill。 我假设是因为系统首选项>安全和隐私>可访问性中不允许该应用程序。但我没有收到允许该应用程序进入可访问性类别的通知。我需要在项目设置中设置一些东西来触发它吗? 但它是从命令行运行的。由于某些原因,我无法从xCode运行。 下面是上面链接中的一个稍加修改

我从命令行工具项目中main.swift下面的链接复制并粘贴了代码。
它构建时没有错误,但当我运行时,guard让eventTap=CGEventTapCreate。。。失败。我认为eventTap从CGEventTapCreate获得nill。
我假设是因为系统首选项>安全和隐私>可访问性中不允许该应用程序。但我没有收到允许该应用程序进入可访问性类别的通知。我需要在项目设置中设置一些东西来触发它吗? 但它是从命令行运行的。由于某些原因,我无法从xCode运行。 下面是上面链接中的一个稍加修改的代码

import Foundation

func myCGEventCallback(proxy : CGEventTapProxy, type : CGEventType, event : CGEvent, refcon : UnsafeMutablePointer<Void>) -> Unmanaged<CGEvent>? {
    if [.KeyDown , .KeyUp].contains(type) {
        var keyCode = CGEventGetIntegerValueField(event, .KeyboardEventKeycode)
        print(keyCode)
        if keyCode == 0 {
            keyCode = 6
        } else if keyCode == 6 {
            keyCode = 0
        }
        CGEventSetIntegerValueField(event, .KeyboardEventKeycode, keyCode)
    }
    return Unmanaged.passRetained(event)
}

let eventMask = (1 << CGEventType.KeyDown.rawValue) | (1 << CGEventType.KeyUp.rawValue)
guard let eventTap = CGEventTapCreate(.CGSessionEventTap, .HeadInsertEventTap, .Default, CGEventMask(eventMask), myCGEventCallback, nil)
else {
        print("failed to create event tap")
        exit(1)
}

let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes)
CGEventTapEnable(eventTap, true)
CFRunLoopRun()
<代码>导入基础 func myCGEventCallback(代理:CGEventTapProxy,类型:CGEventType,事件:CGEvent,refcon:UnsafeMutablePointer)->非托管?{ 如果[.KeyDown,.keydup].包含(类型){ var keyCode=CGEventGetIntegerValueField(事件,.KeyboardEventKeycode) 打印(键码) 如果keyCode==0{ keyCode=6 }如果keyCode==6,则为else{ keyCode=0 } CGEventSetIntegerValueField(事件、.KeyboardEventKeycode、keyCode) } 返回非托管的.passRetained(事件) }
设eventMask=(1如果使用的是Swift3,则CGEventTap常量应以小写字母开头。例如:

.cgsessioneventap
应该是
.cgsessioneventap

这同样适用于
.keyDown
.keydup
.headinserteventap

要从Xcode运行,您需要将Xcode.app添加到:系统首选项>安全和隐私面板(而不是您正在构建的应用程序)

要在没有Xcode的情况下运行,您需要通过从
applicationdFinishLaunching
方法调用
isProcessTrusted
使您的应用程序成为可信的可访问性客户端