CGEventPostToPSN()的替代方案,用于在沙盒环境中激活其他应用程序的菜单项?

Fab*_*ser 18 macos cocoa background sandbox appstore-sandbox

我有这个应用程序,我需要从我的应用程序中激活其他应用程序的菜单项(如打印cmd + p).现在我正在使用CGEventPostToPSN()来完成这项工作并且工作正常,但是当我激活沙盒时,它会停止工作.

CGEventPostToPSN(&psn, keyDownEvent);
CFRelease(keyDownEvent);
CGEventPostToPSN(&psn, keyUpEvent);
CFRelease(keyUpEvent);
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,当我需要启用沙盒时,我该怎么办?我听说过很多关于Accessibility API的内容,但我无法了解如何激活其他应用程序的菜单项.我很感谢你对这个问题的任何答案.

法比安

Fab*_*ser 2

我仍然没有这个问题的最终答案,但似乎可以使用 @nielsbot 建议的 Accessibility API。

有一些有前景的函数,例如AXUIElementPostKeyboardEvent()AXUIElementPerformAction()。问题:Apple 的沙盒指南禁止使用 Accessibility API 控制其他应用程序。

注意:使用应用程序沙箱,您可以而且应该启用应用程序的可访问性,如本文档中所述。但是,您不能对屏幕阅读器等辅助应用程序进行沙箱操作,也不能对控制其他应用程序的应用程序进行沙箱操作。

如果你遇到这个问题并且和我有同样的问题,我担心你运气不好。请重新考虑您是否确实需要控制另一个应用程序,如果是这样,您可能无法在 Mac App Store 上分发您的应用程序,抱歉。

法比安