【问题标题】:Privacy tab using AppleScript使用 AppleScript 的隐私选项卡
【发布时间】:2021-12-01 11:54:22
【问题描述】:

我正在尝试使用 Applescript 访问 隐私 -> 辅助功能 选项卡。谁能帮帮我?

我需要显示该部分中所有程序的列表:

  • 辅助功能
  • 相机
  • 麦克风
  • 照片
  • 等等...

请求本身和终端中的输出使用osascript -e

必须排除与 GUI 的交互。这是我设法找到的

osascript -e 'tell application "System Events" to get the name of every login item'

我需要为辅助功能找到相同的解决方案吗?并得到与下面截图相同的结果。

主要目标是

  1. 本地获取Security & Privacy中包含的信息 2) 通过 SSH 连接到 mac OS 并获取 Security & Privacy 中包含的信息。如果这不可能,那么如何使用单个 Apple 脚本显示信息。

【问题讨论】:

  • 为了在不使用 UI 脚本 的情况下获得所需的信息,您需要使用 @987654323 查询 TCC.db 数据库@.
  • 我不太明白他会给我什么 Library/Application Support/com.apple.EU/EU.vi ??

标签: macos applescript applescript-objc nsapplescript applescript-studio


【解决方案1】:

必须排除与 GUI 的交互(在远程系统上)。

使用 远程系统进行测试 ma​​cOS Big Sur 11.6 并在 [√] Allow full disk access for remote users 中选中>系统偏好设置 > 共享 > 远程系统上的远程登录,然后是示例 shell 脚本 代码本地系统 上的 终端ssh 会话 中执行远程系统将为您提供原始转储系统偏好设置可访问性下列出的内容> 安全和隐私 > 隐私,无需使用 AppleScript 进行 UI 脚本

sqlite3 '/Library/Application Support/com.apple.TCC/TCC.db' 'SELECT client FROM access WHERE service="kTCCServiceAccessibility";'

在测试系统上,它的输出是:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/Support/AEServer
com.apple.AccessibilityInspector
com.apple.Automator
com.apple.ScriptEditor2
com.apple.Terminal
com.latenightsw.ScriptDebugger8

如果你真的需要使用 AppleScript,你可以说你需要 输出 漂亮。换句话说,使用 AppleScript script 保存为 shell 脚本 使用 #!/usr/bin/osascript shebang 输出在同一个远程系统将是例如:

AEServer, Accessibility Inspector, Automator, Script Editor, Terminal, Script Debugger

示例 AppleScript 代码

#!/usr/bin/osascript

set theAccessibilityList to paragraphs of (do shell script "sqlite3 '/Library/Application Support/com.apple.TCC/TCC.db' 'SELECT client FROM access WHERE service=\"kTCCServiceAccessibility\";'")

set theAccessibilityApplicationNamesList to {}
repeat with thisItem in theAccessibilityList
    if thisItem starts with "/" then
        set shellCommand to (do shell script "f=" & quoted form of thisItem & "; echo ${f##*/}")
        set end of theAccessibilityApplicationNamesList to shellCommand
    else
        try
            set end of theAccessibilityApplicationNamesList to the name of application id thisItem
        end try
    end if
end repeat

return theAccessibilityApplicationNamesList

注意事项:

我在本地系统上创建、保存并使其可执行示例 AppleScript 代码,如上所示然后使用scp将其从本地系统复制到远程系统



注意:示例 AppleScript 代码 就是这样,并且没有任何包含的错误处理不包含任何适当的额外错误处理。用户有责任根据需要或需要添加任何错误处理。查看AppleScript Language Guide 中的try statementerror statement。另请参阅Working with Errors。此外,在适当的情况下,可能需要在事件之间使用delay 命令,例如delay 0.5延迟设置得当。

【讨论】:

  • 你的答案适合我,但出于某种原因,我没有任何用处。我得到空值可能是什么问题?
  • @Georgy,RE:“你的答案适合我,但由于某种原因,我没有任何用处。我得到空值可能是什么问题?” -- 请重新阅读我的答案。 --- 我的答案中显示的 example AppleScript code 是不打算在 Script Editor 中使用,就像您刚刚添加到问题中的屏幕截图一样。这意味着在 Terminal 中用作 shell 脚本,使其可执行并使用scp 复制到 远程系统,然后在ssh 会话.
  • 我明白谢谢你的回答。但是,如果我有兴趣运行两个场景?如何使用终端在本地计算机上执行此操作?
  • @Georgy,RE:“我明白感谢您的回答。但是如果我有兴趣运行两个场景?如何使用终端在本地计算机上执行此操作?” - 在您的问题中,您声明“主要目标是通过 SSH 连接到 mac OS”您没有说任何关于在本地进行的操作!您还在我的代码中修改了TCC.db 数据库路径!我的答案在规定的条件下有效!下次您发布问题时,我强烈建议您提供所需的所有内容,并且不要在人们试图帮助您时不断更改参数。
  • 感谢您的回答对我帮助很大
【解决方案2】:

您应该按照以下方式转义嵌套引号。并且,激活系统偏好设置。

osascript -e "
tell application id \"com.apple.systempreferences\"
activate
reveal anchor named \"Privacy_Accessibility\" in pane id \"com.apple.preference.security\"
end tell
tell application id \"sevs\" to tell process \"System Preferences\"
repeat until window \"Security & Privacy\" exists
delay 0.02
end repeat
tell scroll area 1 of group 1 of tab group 1 of window \"Security & Privacy\"
get value of static text 1 of UI element 1 of rows of table 1
end tell
end tell"

或者,如果所需项目(左侧)的所需表格视图(右侧)已经打开,您可以在 Catalina 上使用以下 osascript:

osascript -e "
tell application id \"sevs\" to tell process \"System Preferences\"
set frontmost to true
tell scroll area 1 of group 1 of tab group 1 of window \"Security & Privacy\" to get value of static text 1 of UI element 1 of rows of table 1
end tell"

【讨论】:

  • 不完全是您所需要的。我设法找到 osascript -e "通知应用程序 "系统事件" 以获取 1 个用户界面元素 1 表行 1 滚动区域 1 组 1 选项卡组 1 窗口 1 应用程序进程 "系统设置" "信息的静态文本的值输出适合我,但如果没有活动窗口,它就无法工作。在不使用图形界面的情况下是必要的。
  • 我更新了答案。我在 Catalina 上,所以为它编写了 GUI 脚本代码行
  • 如果您使用 单引号 语句的打开和关闭,其中...语句中剩余的未转义双引号,例如:osascript -e 'tell application id "com.apple.systempreferences" ...'跨度>
  • 不,所有这些决定都是错误的,有与图形界面的交互。有必要排除与 GUI 的交互。这是我设法找到的 osascript -e 'tell application "System Events" to get the name of each login item' 。我需要为辅助功能找到相同的解决方案吗?
  • user3439894 如果您使用单引号来打开和关闭语句,那么带反斜杠的双引号是什么意思。有建议的话,仔细听听?
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多