我从命令行工具项目中的main.swift下面的链接复制并粘贴了代码。
How do you use CGEventTapCreate in Swift?
它构建没有错误,但是当我运行时,警告让eventTap = CGEventTapCreate ...失败。我认为eventTap来自CGEventTapCreate
我假设因为系统首选项中不允许使用该应用程序>安全和隐私>可访问性。我不会收到通知,以允许应用程序进入辅助功能类别。我是否需要在项目设置中设置一些内容才能触发?
它从命令行运行。由于某种原因,我无法从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()
答案 0 :(得分:0)
如果您使用 Swift3 ,则CGEventTap常量应以小写字母开头。例如:
.CGSessionEventTap
应为.cgSessionEventTap
.keyDown
,.keyUp
,.headInsertEventTap
等也是如此......
要从Xcode运行,您需要将 Xcode.app 添加到:系统偏好设置&gt;安全与安全隐私面板(不是您正在构建的应用程序)。
要在没有 Xcode的情况下运行,您需要通过isProcessTrusted
方法调用applicationDidFinishLaunching
,使您的应用成为受信任的辅助功能客户端。