コマンドラインツールプロジェクトのmain.swift以下のリンクからコードをコピーして貼り付けました。 How do you use CGEventTapCreate in Swift?
これはエラーなしでビルドされますが、実行すると、guardはeventTap = CGEventTapCreate ...が失敗します。私はeventTapがCGEventTapCreateからnillを取得すると思います。
システムの設定>セキュリティとプライバシー>アクセシビリティではアプリが許可されていないと考えます。私はアクセシビリティカテゴリのアプリを許可する通知を取得しません。それを引き起こすためにプロジェクト設定で何かを設定する必要がありますか? これはコマンドラインから実行されます。何らかの理由でxCodeから実行できません。 上記のリンクから少し変更されたコードです。Can not CGEventTapCreate
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()