如何创建一个AppleScript,该AppleScript将在特定时间退出应用程序,然后使计算机进入睡眠状态?


8

我一直在玩弄AppleScript和Automator来使该功能正常工作,但是我似乎无法解决这个问题。如果有人可以给我看一个例子,或者给我一些技巧,让我可以设置如何在特定时间关闭应用程序,然后使计算机进入睡眠或关闭状态,将不胜感激。


您要定期执行此操作还是要手动启动此操作?
伊夫史密斯2012年

您已经编写了AppleScript吗?
ephsmith 2012年

我想定期进行此操作,而不必担心启动。我确实写了一个脚本,但是它很乱,所以我把它扔掉了,到这里结束了。感谢您的回答。我会尝试一下,希望它可以解决我遇到的问题。
托马斯·理查森

如果您希望定期进行此操作,at则不希望与之计划作业。cronlaunchd。如果您想要一个更简单的界面来进行设置,则lingon 3可能会有所帮助。
伊夫史密斯

Answers:


14

我假设您要启动此过程,而不是让它定期运行。

我的方法是从命令行启动此命令,但是任何命令都可以在经过一些修改的情况下在Automator脚本的Shell脚本组件中运行。以下方法结合了一些组件来完成工作:

  1. 一个tell命令退出应用程序
  2. 命令行调用使计算机进入睡眠状态
  3. 在特定时间的计划1和2的命令行调用。

1.告诉申请退出

这可以很简单:

osascript -e 'tell application "AppName" to quit'

2.使计算机进入睡眠状态

请查看pmset更多详细信息,但是发出以下命令会使计算机进入睡眠状态:

pmset sleepnow

3.安排要在特定时间运行的操作

看一下at命令。该命令使您能够指定命令运行的时间。您需要启用此功能,因为默认情况下未启用此功能。要启用atrun守护程序,请运行以下命令[SU上的参考]

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

启用后atrun,可以通过发出以下命令在特定时间安排任何命令

echo "<command>" | at HH:MM

之所以有效,是因为默认情况下at会接受它的输入stdin。一种更简单的方法是运行文件中列出的命令。可以通过使用-f标志来执行文件,后面是要运行的脚本名称,如下所示:

at -f /path/to/file HH:MM

放在一起

以下假定atrun已启用。作为一个玩具示例,假设我要退出Mail并使计算机在晚上11点进入睡眠状态。我将创建一个包含要运行的命令的文件,如下所示:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

将该文件保存到quit-and-sleep然后在命令行上运行

at -f /path/to/quit-and-sleep 23:00

注意事项

我没有做任何检查来确保Mail实际上已关闭。该脚本还假定其他任何因素都不会妨碍计算机进入睡眠状态。在这里,我将其简单化为您想要的起点。


1

给定一个硬编码的时间值,这是一个严格的applescript版本,可以完成此操作。当然,您可以根据需要使此部分具有交互性。此外,此版本还假定与今天有关的时间范围。

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell

1

您可以通过以下方式安排一次活动:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

或者要将其安排为每天重复,请使用编辑crontab EDITOR=nano crontab -e并添加如下条目:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow

在23:59 <<<'osascript -e“退出应用\”邮件\“”; pmset sleepnow'对我不起作用。它说“ 2016年6月30日星期六的工作1”,但在时间到了时不运行命令
oluckyman

0

下面的代码将在退出当前应用程序并进入睡眠状态之前等待几秒钟。

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.