使用Applescript有选择地激活具有两个正在运行的实例的应用程序的一个实例

时间:2014-03-27 19:11:20

标签: applescript

我在计算机上同时运行两个iTerm实例(OS X 10.9)。我复制了iTerm包并进行了以下更改:

  • 重命名包 iTerm copy.app >的 scratchpad.app
  • 重命名 scratchpad.app/Contents/MacOS/iTerm >的暂存器
  • Info.plist中,设置 CFBundleName >的暂存器
  • Info.plist中,设置 CFBundleIdentifier >的 com.seanmackesey.scratchpad
  • Info.plist中,设置 CFBundleExecutable >的暂存器

我能够成功运行这两个实例 - 在停靠栏和菜单栏中,第二个实例根据需要标记为“暂存”。但是,当我执行applescript时:

tell application "iTerm" to activate

这将导致我的暂存器激活。如何避免这种情况,以便此行只激活我原来的iTerm实例?

2 个答案:

答案 0 :(得分:1)

尝试按应用[捆绑] ID 激活:

tell application id "net.sourceforge.iTerm" to activate

至于你所看到的为什么会发生: 您可能需要更改另外两个属性:

  • CFBundleDisplayName
  • CFDisplayName

顺便说一下,要获取应用程序的[bundle] ID,只需运行(在终端中),例如:

osascript -e 'tell application "iTerm" to id'

答案 1 :(得分:1)

我喜欢mklement发布的关于使用应用程序ID的内容。另一种方法是使用系统事件和进程。进程具有可帮助您标识特定运行进程的属性。例如,可以使用"显示的名称"财产或"名称"或"短名称"或"标题"或者等等。因此,您可以查看属性并选择一些独特的属性并识别它。一旦你有了特定的过程,就可以像这样把它带到前面。请注意我使用"显示的名称"在此示例中标识Safari的属性。

tell application "System Events"
    set theProcess to first application process whose displayed name is "Safari"
    set frontmost of theProcess to true
end tell