我有一款免费或便宜的小应用程序,名为 Desktop Task Timer LE,我一直用它来跟踪我从事各种项目的时间。我希望它每 15 分钟作为前台应用程序弹出一次,以防止我在转到其他任务后忘记停止/更改计时器。我知道我可以使用 Automator 或 AppleScript 中的脚本启动应用程序,但我不知道如何让该脚本每 15 分钟启动一次。我读过关于使用 Launchd 和 iCal 的文章,但我仍然不确定如何使用它。(实际上,iCal 可能很简单,但我不想用它来做这件事。)有什么想法吗?
此外,还有一个功能是,当电脑 5 分钟(或 x 分钟)不活动时,它会弹出。不确定这是否能满足我的需求,但如果可能的话,我想测试一下。
答案1
〜/库/LaunchAgents/com.stackoverflow.open.desktop.task.timer.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.stackoverflow.open.desktop.task.timer</string>
<key>ProgramArguments</key>
<array>
<string>open</string>
<string>-a</string>
<string>Desktop Task Timer LE</string>
</array>
<key>StartInterval</key>
<integer>900</integer> <!-- every 900 seconds -->
<key>RunAtLoad</key> <!--run on the 0th second-->
<true/>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.stackoverflow.open.desktop.task.timer.plist
或注销并重新登录。
crontab -e
*/15 * * * * open -a "Desktop Task Timer LE"
- 您可以使用其他编辑器,例如
EDITOR=nano crontab -e
crontab -l
列出当前计划的任务crontab /path/to/file
从外部文件更新表格
答案2
我看到了 Lri 的答案,您已将其选为正确答案。我想向您展示一种不同的方法,该方法也可以处理您请求的第二个“功能”。此方法也使用 launchd,但它运行一个 applescript。这是 applescript。请注意,我使用 TextEdit 检查了它,因此只需将其更改为您的应用程序名称即可。
property lastRunDate : missing value
set currentDate to current date
if lastRunDate is missing value then set lastRunDate to currentDate
set idleTime to (do shell script "ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'") as number
-- check if the computer has been idle for 5 minutes or if 15 minutes has passed
if idleTime is greater than or equal to (5 * 60) or (currentDate - lastRunDate) is greater than or equal to (15 * 60) then
tell application "TextEdit" to activate
set lastRunDate to currentDate
end if
这是 launchd plist。请注意,它每 5 分钟运行一次,applescript 会检查您的 5 分钟标准或 15 分钟标准。从中您可以看到,我将 applescript 命名为“FiveMinuteRunner.scpt”,并将其放在我的桌面上。祝你好运 :)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StartInterval</key>
<integer>300</integer>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/Users/hmcshane/Desktop/FiveMinuteRunner.scpt</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>Label</key>
<string>com.HAMSoftEnginnering.FiveMinuteRunner</string>
</dict>
</plist>
答案3
为什么不使用 Growl 进行通知呢?你不觉得这是更好的解决方案吗?
你甚至可以添加声音。
http://growl.info/