AppleScript在脚本编辑器中工作,但不在应用程序中

时间:2015-02-15 19:53:27

标签: applescript fullscreen systemevent

我对编程很陌生,尤其是AppleScript。我为情人节写了一个简单的剧本,从iTunes播放一首歌,然后在Safari中打开一个flash动画文件。当我在ScriptEditor中运行脚本时,一切都按预期工作,但是当我作为独立应用程序导出时,它在命令时失败以启用全屏模式。我假设它是系统事件的问题。为了清楚起见,应用程序功能到最后,但在按键命令时,我听到一个警报声,窗口保持原样。

我正在运行Yosemite,并且已完全更新。

理想情况下,我想在Google Chrome中打开该文件以使用演示模式,但我甚至无法让Chrome打开该文件。

感谢您的任何建议!这是代码:

tell application "Finder"
  set visible of every process whose visible is true and name is not "Finder" to false
  close every window
end tell

set volume output volume 75

tell application "iTunes"
  set currentVolume to sound volume
    if player state is playing then
      stop
      back track
    end if
  play track "The Promise"
  set player position to 6
end tell

delay 4

tell application "Safari"
  activate
  if (count of windows) is 0 then -- Remove "if" statement if you don't want to make a new window if there is none
    make new window at front
  end if

open (POSIX path of (path to home folder)) & "/Desktop/beMine/beMine.swf"
  tell application "System Events"
    tell process "Safari" to keystroke "f" using {command down, control down}

  end tell
end tell

2 个答案:

答案 0 :(得分:0)

您很可能需要允许独立应用程序使用系统事件。在某些时候,您需要为脚本编辑器执行此操作;您需要为独立应用程序执行相同的操作。

您可以在“安全和放大”下的“系统偏好设置”中找到该选项。隐私,然后是隐私,然后是辅助功能。会有一个应用列表,您的应用可能会在那里列出而不检查“允许以下应用控制您的计算机。”

您可能需要使用“+”按钮将您的应用添加到列表中。

我已经确认我可以使用这个简单的脚本来使Safari全屏;如果应用程序在“辅助功能”下被授予权限,它将起作用,如果没有,它将无声地失败。

tell application "Safari"
    activate
end tell

tell application "System Events"
    tell process "Safari" to keystroke "f" using {command down, control down}
end tell

这是Yosemite,Mac OS X 10.10;在其他版本的Mac OS X中可能会有所不同。

答案 1 :(得分:0)

我同意Jerry Stratton的评论,认为这可能是一个无障碍问题。但是,在Safari准备好接受之前,您可能会发出keystroke命令。如果它打开一个文件,那么它可能很忙并且错过了按键命令。

另外,我会将系统事件代码移到Safari代码之外,并且只是告诉系统事件而不是Safari进程来执行keystroke命令。尝试将其作为Safari和System Events部分。

注意:我无法让Chrome打开文件。

tell application "Safari"
    activate
    if (count of windows) is 0 then -- Remove "if" statement if you don't want to make a new window if there is none
        make new window at front
    end if

    open (POSIX path of (path to home folder)) & "/Desktop/beMine/beMine.swf"
end tell

tell application "Safari" to activate
delay 1
tell application "System Events"
    keystroke "f" using {command down, control down}
end tell