swift - 无法在 macOS Mojave 应用程序中模拟击键

标签 swift macos-mojave keystroke

我需要在 macOS Mojave 应用程序 (Xcode 10.3) 中模拟用户键盘输入(例如,键入字母“a”)。我正在尝试使用此问题中发布的代码:

https://stackoverflow.com/questions/39647443/simulate-keystrokes-with-quartz-events-in-macos-sierra

但是,在我的应用程序请求控制系统事件的权限并且我运行下面的代码块之后,什么也没有发生(除了让我知道代码块实际上正在执行的语句打印之外)。代码运行没有任何错误,但我没有任何功能。

我已确保我的应用未被沙盒化,并且我的应用有权控制我的计算机和系统事件(在安全和隐私方面)。

这是我正在使用的代码(其中 99% 来自上面链接的帖子):

let eventSource = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
let key: CGKeyCode = 0     // virtual key for 'a'
let eventDown = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: true)
let eventUp = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: false)
let location = CGEventTapLocation.cghidEventTap
eventDown?.post(tap: location)
eventUp?.post(tap: location)

知道为什么这对我不起作用吗?

最佳答案

  1. 需要在info.plist中添加“隐私-AppleEvents发送使用说明”

  2. 每当您对代码进行任何更改时,您都必须再次禁用和启用应用程序的安全和隐私权限 -> 辅助功能

关于swift - 无法在 macOS Mojave 应用程序中模拟击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683783/

相关文章:

json - Swift JSON 需要跳过一个组并获取其子元素

swift - 为什么以及何时应该使用可选函数(在 Swift 中)?

macos - AEDeterminePermissionToAutomateTarget 的授权等待无限时间

c - MacOS Mojave 中的 C 头文件在哪里?

keyboard - 如何拦截击键?

ios - 停止键盘关闭以重置 View 的高度

ios - 为什么每次加载新的 xib 文件时?为什么它不替换以前的文件?

python - Mac OSX Mojave 10.14 上的 OpenGL

java - 如何将 Java Swing 中的键盘输入映射到另一个字符或字符串?

java - 在 Swing 中使用 KeyListener 的 3 个方法时感到困惑吗?