相关疑难解决方法(0)

如何在Swift中将self转换为UnsafeMutablePointer <Void>类型

在调用以下代码时,尝试将"self"传递给swift中的C函数:

var callbackStruct : AURenderCallbackStruct = 
    AURenderCallbackStruct.init(
      inputProc: recordingCallback,
      inputProcRefCon: UnsafeMutablePointer<Void>
    )
Run Code Online (Sandbox Code Playgroud)

在这里将"self"转换为UnsafeMutablePointer类型的理想方法是什么?

pointers casting unsafe-pointers swift

44
推荐指数
1
解决办法
2万
查看次数

CGEventPost - 持钥匙(班次)

我正在寻找一种方法来设计一个带有修改键的小面板(例如,shift,命令),并且必须像虚拟键盘一样点击它.

我希望它有这种行为:

  • 单击虚拟键(shift).
  • 换档按钮保持,并持续按下.
  • 用我的标准键盘输入内容.
  • 单击虚拟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"按钮细胞类型是关键,但不幸的是没有.:-)

任何帮助?

提前致谢.

cocoa keyboard-events

11
推荐指数
1
解决办法
901
查看次数

即使禁用沙箱,CGEvent.tapCreate 也返回 nil

我有一个带有 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 的权限?

macos xcode swift

4
推荐指数
1
解决办法
526
查看次数

如何将 NSEvent 标记为已处理?

我使用以下代码处理键盘上字母键的按下。

NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { event in
    // code
}
Run Code Online (Sandbox Code Playgroud)

然后如何将 NSEvent 标记为已处理,不允许系统和其他应用程序再次处理它?例如不允许在打开的文本编辑器中输入按下的字母?

macos xcode cocoa swift

2
推荐指数
1
解决办法
377
查看次数