gpt4 book ai didi

swift - 不能 CGEventTapCreate

转载 作者:行者123 更新时间:2023-11-28 08:29:15 28 4
gpt4 key购买 nike

我在命令行工具项目中复制并粘贴了 main.swift 下面链接中的代码。 How do you use CGEventTapCreate in Swift?
它构建没有错误,但是当我运行时, guard let 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()

最佳答案

如果您使用的是 Swift3,那么 CGEventTap 常量应该以小写字母开头。例如:

.CGSessionEventTap应该是 .cgSessionEventTap

.keyDown也是如此, .keyUp , .headInsertEventTap等等……

为了从 Xcode 运行,您需要将 Xcode.app 添加到:System Preferences > Security & Privacy 面板(不是您正在构建的应用程序)。

要在没有 Xcode 的情况下运行,您需要通过调用 isProcessTrusted 使您的应用程序成为受信任的辅助功能客户端来自你的 applicationDidFinishLaunching方法。

关于swift - 不能 CGEventTapCreate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39211049/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com