【问题标题】:Difference between AXIsProcessTrustedWithOptions and NSWorkspace openURL for changing accessibilityAXIsProcessTrustedWithOptions 和 NSWorkspace openURL 之间用于更改可访问性的区别
【发布时间】:2017-09-14 03:34:37
【问题描述】:

为了能够使用某些功能,用户需要在辅助功能面板中启用应用程序。有两种方法可以调出如下所示的页面

解决方案 1

NSDictionary* options = @{static_cast<id> (kAXTrustedCheckOptionPrompt): @YES};
return AXIsProcessTrustedWithOptions(static_cast<CFDictionaryRef> (options));

解决方案 2

NSString* urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility";
[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString:urlString]];

与解决方案 1 相比,解决方案 2 不需要引入额外单击的解释对话框。这是我更喜欢使用解决方案 2 的主要原因。

但我发现有时使用解决方案 2 的系统无法识别我启用的应用程序。因为有时即使在可访问性面板中启用了应用程序,当我启动会产生另一个子进程的包时,标准错误输出诸如“辅助设备不信任此过程”之类的内容。

解决方案 1 是否有一些隐藏的技巧,而解决方案 2 没有?

【问题讨论】:

    标签: objective-c macos accessibility


    【解决方案1】:

    直接回答这个问题:我不知道有什么区别,但我也注意到从第一个解决方案调用 AXIsProcessTrustedWithOptions 不知何故会使我的应用程序出现在辅助功能窗格中,而第二个解决方案则没有。魔法?也许吧。

    但是有一种方法可以使用第一种解决方案,而不会出现提示用户再次单击的对话框。

    解决方案 3(第 1 个的衍生产品):

    NSDictionary* options = @{static_cast<id> (kAXTrustedCheckOptionPrompt): @NO};
    return !AXIsProcessTrustedWithOptions(static_cast<CFDictionaryRef> (options));
    

    以某种方式这样做不会导致对话框弹出;但它会触发神奇的AXIsProcessTrustedWithOptions,这会使应用程序出现在辅助功能窗格中。

    然后您可以使用返回的值来确定您是否需要为用户打开窗格、显示一些自定义对话框或其他任何您想要的内容。

    来源和更多信息:https://stackoverflow.com/a/18121292/8538394

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多