1

我有这个 AppleScript:

tell application "Finder" to display dialog "derp" -- display a dialog
tell application "System Events" to keystroke return -- dismiss that dialog by simulating the pressing of the "return" key

当它被执行时,我认为通过模拟按下“return”键可以关闭对话框keystroke return。谢谢。

4

2 回答 2

4

你的脚本不起作用。当您告诉应用程序执行某项操作时,applescript 会等待应用程序执行此操作,然后再执行其余代码。因此,该脚本正在等待 Finder 完成其任务,然后再继续执行系统事件代码。因此,基本上在您的脚本中,系统事件命令直到对话框被关闭后才会运行,这意味着您永远不能以这种方式关闭对话框。

但是,您可以告诉 applescript 不要等待来自这样的应用程序的响应......

ignoring application responses
    tell application "Finder"
        activate
        display dialog "blah"
    end tell
end ignoring

delay 0.5
tell application "System Events" to keystroke return

由于 applescript 是单线程的,另一种方法是使用两个单独的进程。一个显示对话框,第二个关闭对话框。您可以使用 2 个不同的 applescripts 来做到这一点,每个任务一个。另一种方法是使用 shell 创建一个进程,然后将该进程发送到后台,这样 applescript 就不会等待 shell 完成,然后关闭对话框。这就是你如何做到这一点的方法。

do shell script "osascript -e 'tell application \"Finder\"' -e 'activate' -e 'display dialog \"blah\"' -e 'end tell' > /dev/null 2>&1 &"
delay 0.5
tell application "System Events" to keystroke return

所以你看到有几种方法可以做到这一点。祝你好运。

于 2011-07-04T16:32:42.657 回答
3

“显示对话框”命令包含一个giving up after [number]参数,它会在 [number] 秒后自动关闭对话框。一个简单的例子:

tell application "Finder" to display dialog "Quick, press a button!" buttons{"1","2","3"} default button 1 giving up after 5

此代码生成一个包含三个按钮的对话框。只要您在指定的时间内(在本例中为 5 秒)内进行操作,您就可以单击其中任何一个。如果你不这样做,命令返回的“对话回复”记录将是这样的:

{button returned:"1", gave up:true}

我希望这有帮助!:)

于 2011-07-04T18:37:25.250 回答