在调用以下代码时,尝试将"self"传递给swift中的C函数:
var callbackStruct : AURenderCallbackStruct =
AURenderCallbackStruct.init(
inputProc: recordingCallback,
inputProcRefCon: UnsafeMutablePointer<Void>
)
Run Code Online (Sandbox Code Playgroud)
在这里将"self"转换为UnsafeMutablePointer类型的理想方法是什么?
我正在寻找一种方法来设计一个带有修改键的小面板(例如,shift,命令),并且必须像虚拟键盘一样点击它.
我希望它有这种行为:
这是我正在使用的代码:
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef shiftKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, YES);
CGEventRef shiftKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, NO);
CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyDown);
CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyUp);
CFRelease(shiftKeyUp);
CFRelease(shiftKeyDown);
CFRelease(source);
Run Code Online (Sandbox Code Playgroud)
在我再次点击它之前,我找不到按下它的方法.我虽然"Push On Push Off"按钮细胞类型是关键,但不幸的是没有.:-)
任何帮助?
提前致谢.
我有一个带有 swift 桥的 C 文件,我可以调用我的 macos 程序并且它工作正常。
但是它有一个函数 CGEventTapCreate 只能在终端中使用 sudo 才能工作,否则它会返回 null,就是这种情况。
所以我把 C 代码移植到 Swift,但该函数仍然返回 nil,因为它没有特权。常见的解决方案是禁用沙箱,但问题仍然存在。
let eventTap : CFMachPort? =
CGEvent.tapCreate ( tap: CGEventTapLocation.cgSessionEventTap
, place: .headInsertEventTap
, options: CGEventTapOptions.defaultTap
, eventsOfInterest: mask
, callback: myCGEventCallback
, userInfo: nil )
if eventTap == nil { -- always enter here
print("[Swift] Failed to create event tap :(")
exit(1)
}
Run Code Online (Sandbox Code Playgroud)
TL;DR:如何授予 macOS 应用程序运行 CGEventTapCreate 的权限?
我使用以下代码处理键盘上字母键的按下。
NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { event in
// code
}
Run Code Online (Sandbox Code Playgroud)
然后如何将 NSEvent 标记为已处理,不允许系统和其他应用程序再次处理它?例如不允许在打开的文本编辑器中输入按下的字母?