コマンド ライン ツール プロジェクトの main.swift の下のリンクからコードをコピーして貼り付けました。
Swift で CGEventTapCreate をどのように使用しますか?
エラーなしでビルドされますが、実行すると、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()