0

我正在开发一个控制光标的 macOS 应用程序。我正在使用 CGEvent Tap 并且我正在向 CGEvents 添加一些算术以偏移最终的鼠标位置。尽管该应用程序在原则上按预期工作,但在某些情况下 - 更具体地说:当使用某些流行的插图软件并使用触控笔运行应用程序时 - 该应用程序会在其原始位置为鼠标产生一些闪烁的“幽灵”位置。好消息是,在以 root 用户身份登录运行应用程序时,可以解决此问题。我已经阅读了很多 SO 帖子,但这篇特别的帖子最好地解决了这个问题:

https://stackoverflow.com/a/9899901/5066660

如本文所述,问题可能是:

不幸的是,CGEventTapCreate() 文档说:只有以 root 用户身份运行的进程才能在 HID 事件进入窗口服务器的位置找到事件点击;对于其他用户,此函数返回 NULL。

好吧,该函数肯定不会返回 null,因为点击已生效。我还尝试了该函数的所有可能参数组合,但它们的作用都相同。在该职位的进一步下方,建议按以下方式解决该问题:

也许您可以将此功能分离到具有超级用户权限的单独进程中,让您的应用程序的其余部分处于正常用户模式?我相信还有一种方法可以为您的程序执行的特定操作请求 root 权限。

现在,如果这是一个可能的解决方案,我很乐意实施它!所以我的问题是:如何?我偶然发现运行具有提升权限的脚本,但不仅仅是 CoreGraphics 代码,例如 CGEventTap。这可能吗?任何人都可以给我一个如何实现这一点的例子,或者任何其他解决问题的方法吗?

欢迎大家帮忙,非常感谢。

4

1 回答 1

0

来自 Apple 文档:

如果以下条件之一为真,则事件轻击会接收按键向上和按键向下事件:

- 当前进程以 root 用户身份运行。

- 启用辅助设备访问。在 OS X v10.4 中,您可以使用系统偏好设置、通用访问面板、键盘视图启用此功能。

因此,赋予应用程序可访问性权限为我解决了它(无需以管理员身份运行)。这可以通过 System Preferences -> Security & Privacy -> Accessibility 并在那里添加您的程序来实现。

于 2018-09-20T09:43:17.807 回答