如何编写AppleScript以获得每小时弹出的提醒窗口?

7

我想知道如何在我的电脑(Mac OS X)上每小时弹出一个弹窗警报。我觉得用Applescript编写这个功能应该很简单,但我没有Applescript的经验。谢谢。


Applescript入门教程:http://homepage.mac.com/swain/Macinchem/Applescript/AppScript_tut/AppScrip_tut_1/appscript_tut_1.htm - FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner 链接失效了! - Alexander Wallin
2个回答

9

在AppleScript中,定期执行操作的基本处理程序是空闲处理程序。

on idle
 display dialog "Go back to work" buttons "Work Harder" default button "Work Harder"
 return 3600
end idle

这个脚本将在启动应用程序时弹出对话框,然后每按一次按钮后的3,600秒后再次弹出。无论空闲处理程序返回什么数字,都将是下一个空闲事件触发之前的秒数。
如果你想让它在半小时而不是每60分钟运行一次,则需要使空闲脚本返回不同的秒数,例如60,并检查是否处于正确的小时段。
on idle
 if the minutes of the (current date) is 30 then
  display dialog "Go back to work" buttons "Work Harder" default button "Work Harder"
 end if
 return 60
end idle

这将只在半小时时显示对话框。(与Unix类似,AppleScript的当前日期概念包括当前时间。)

在每种情况下,您都需要将其保存为“应用程序”并“保持打开状态”以便它响应空闲事件而不是在运行后仅退出。您可以将该应用程序添加到“帐户”系统首选项中的“登录项”列表中,以使其在登录时自动运行。


如果我当时更清醒,它们就更像《动物庄园》了。 - Jerry Stratton
难道直接从当前日期的分钟数中减去60,将其乘以60并在第二个版本中返回不是更容易吗?这样,您就不需要每分钟检查一次。 - 11684
@11684,好的,那就可以了。我想举一个每分钟检查的例子,但是以防有人需要的不仅仅是一个普通的弹出窗口。请注意,第二个例子之前有一个错别字——它应该说“在半小时”而不是“在整点”;这就是为什么它将分钟与30进行比较而不是0。 (现在已经修正了错别字。) - Jerry Stratton

0
在测试Jerry的解决方案后,我发现了一个问题。如果您的AppleScript应用程序在事件发生时没有置顶,您可能会收到一个AppleScript错误,唯一能提醒您的只有Dock中图标的闪烁。 因此,我做了一个小改动: 打开AppleScript编辑器并输入以下内容:
on idle
  tell application "call_me"
    activate
  end tell
  display dialog "Back to work" buttons "Work!" default button "Work!"
  return 3600
end idle

在文件选择器的底部菜单中选择“应用程序”,然后勾选“执行后不要退出”(法语中为“Ne pas quitter après l'exécution”)保存脚本,以便在事件之后应用程序仍保持活动状态。您必须将您的应用程序命名为“call_me”,或者如果更改了名称,则还需在代码中更改此名称(告诉应用程序“xxxx”激活)。每隔3600秒,应用程序将被强制退出,然后将显示警报框。

只有一个要点:第一次保存应用程序时,AppleScript将向您显示一个选择器,并询问“call_me.app在哪里?”只需取消此选择器并保存即可。

哦!我要回去工作了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接