Applescript可以列出码头中的所有应用程序吗?

时间:2013-01-09 19:51:41

标签: applescript dock

我无法弄清楚如何列出用户在停靠栏中放置的所有应用程序。

这可能吗?

2 个答案:

答案 0 :(得分:2)

试试这个。这是一个人在Dock中持久存在的应用程序列表。我基本上做的是使用系统事件将plist文件读入pListItems变量中的applescript记录。然后我可以使用applescript技术来访问pListItems中的列表和记录。

com.apple.dock中有很多信息,所以你可以查看pListItems变量并通过它来完成你需要的任何东西。例如,您可能想要“| bundle-identifier |”而不是“| file-label |”。祝你好运。

set plistpath to (path to preferences folder as text) & "com.apple.dock.plist"

tell application "System Events"
    set plistContents to contents of property list file plistpath
    set pListItems to value of plistContents
end tell
set persistentAppsList to |persistent-apps| of pListItems

set dockAppsList to {}
repeat with thisRecord in persistentAppsList
    set end of dockAppsList to |file-label| of |tile-data| of thisRecord
end repeat

return dockAppsList

答案 1 :(得分:2)

通过regulus6633添加响应根据建议,使用|bundle-identifier|确实可以在此脚本中获得更可靠的结果。例如,由于Evernote.app和EvernoteHelper.app具有相同的短名称(|file-label|),Evernote将无法使用CFBundleName属性在所有AppleScript使用中正确识别。

其他想法我使用此脚本作为启动永久放置在Dock中的所有应用程序(“Keep in dock”选项)的基础。我删除了dockAppsList数组并替换了第二个循环来激活所有这些应用程序。为了避免窗户溅到我的屏幕上,我保持appName并在激活应用程序后立即使用它来隐藏它们。

要调整,请使用以下内容替换end tell语句后面的代码:

repeat with thisRecord in |persistent-apps| of pListItems
set appName to |file-label| of |tile-data| of thisRecord
set appID to |bundle-identifier| of |tile-data| of thisRecord
tell application id appID to activate
tell application "Finder" to set visible of process appName to false
end repeat