Làm cách nào để tạo một AppleScript sẽ thoát ứng dụng tại một thời điểm cụ thể và sau đó đặt máy tính vào chế độ ngủ?


8

Tôi đã chơi đùa với AppleScript và Automator để làm cho thứ này hoạt động, nhưng tôi dường như không thể quấn đầu xung quanh nó. Nếu bất cứ ai có thể chỉ cho tôi một ví dụ hoặc cho tôi một số mẹo về cách tôi có thể đặt ứng dụng đóng vào một thời điểm cụ thể và sau đó đặt máy tính ở chế độ ngủ hoặc tắt máy, nó sẽ được đánh giá rất cao.


Bạn có muốn điều này được thực hiện thường xuyên hay đây là điều bạn muốn bắt đầu bằng tay?
ephsmith

Bạn đã có AppleScript được viết chưa?
ephsmith

Đó là điều tôi muốn được thực hiện thường xuyên và không phải lo lắng về việc bắt đầu. Tôi đã có một kịch bản được viết nhưng nó khá lộn xộn nên tôi đã bỏ nó và kết thúc ở đây. Cảm ơn câu trả lời của bạn. Tôi sẽ thử và hy vọng nó sẽ làm sáng tỏ những vấn đề tôi gặp phải.
Tomás Richardson

nếu bạn muốn việc này được thực hiện thường xuyên, thì việc lên lịch cho công việc atkhông phải là điều bạn muốn. cronhoặc launchd. Nếu bạn muốn có một giao diện dễ dàng hơn để thiết lập nó, có thể lingon 3 sẽ giúp ích.
ephsmith

Câu trả lời:


14

Tôi cho rằng bạn muốn bắt đầu quy trình này thay vì để nó chạy vào thời gian được lên lịch thường xuyên.

Cách tiếp cận của tôi sẽ là bắt đầu điều này từ dòng lệnh, nhưng bất kỳ lệnh nào cũng có thể được chạy trong thành phần tập lệnh shell của tập lệnh Automator với một số sửa đổi. Cách tiếp cận sau đây kết hợp một vài thành phần để hoàn thành công việc:

  1. Một telllệnh để thoát khỏi ứng dụng
  2. Một cuộc gọi dòng lệnh để đặt máy tính ngủ
  3. Một cuộc gọi dòng lệnh để lên lịch 1 và 2 trong một thời gian cụ thể.

1. Nói ứng dụng bỏ

Điều này có thể đơn giản như:

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

2. Đặt máy tính vào chế độ ngủ

Hãy xem pmsetđể biết thêm chi tiết, nhưng ban hành lệnh sau sẽ khiến máy tính của bạn ngủ:

pmset sleepnow

3. Lên lịch cho một hoạt động được chạy tại một thời điểm cụ thể

Có một cái nhìn tại lệnh. Lệnh này cung cấp cho bạn khả năng chỉ định thời gian để lệnh chạy. Bạn sẽ cần kích hoạt chức năng này vì nó không theo mặc định. Để bật atrundaemon, hãy chạy lệnh sau [tham khảo trên SU] :

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

Khi bạn đã bật atrun, mọi lệnh có thể được lên lịch trong một thời gian cụ thể bằng cách ban hành

echo "<command>" | at HH:MM

Nó hoạt động bởi vì atnó lấy đầu vào từ stdinmặc định. Một cách tiếp cận đơn giản hơn là chạy các lệnh được liệt kê trong một tệp. Một tập tin có thể được thực thi bằng cách sử dụng -fcờ, theo sau là tên của tập lệnh sẽ được chạy như thế này:

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

Để tất cả chúng cùng nhau

Điều gì sau giả định atrunđược kích hoạt. Để làm ví dụ về đồ chơi, hãy nói rằng tôi muốn thoát khỏi Mail và đặt máy tính ngủ vào lúc 11 giờ tối. Tôi sẽ tạo một tệp chứa các lệnh mà tôi muốn chạy như sau:

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

Lưu tệp đó vào quit-and-sleepvà sau đó chạy trên dòng lệnh

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

Hãy cẩn thận

Tôi đã không thực hiện bất kỳ kiểm tra nào để đảm bảo rằng Thư thực sự đóng. Kịch bản cũng giả định rằng không có gì khác sẽ cản trở máy tính ngủ. Tôi đã giữ nó đơn giản ở đây như một điểm khởi đầu cho những gì bạn muốn.


1

Đây là một phiên bản applescript hoàn thành điều này với giá trị thời gian được mã hóa cứng. Tất nhiên, bạn có thể làm cho phần này tương tác nếu bạn muốn. Ngoài ra, phiên bản này giả định chuỗi thời gian liên quan đến ngày hôm nay.

--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

Bạn có thể lên lịch một sự kiện một lần tại:

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

Hoặc để lên lịch để lặp lại mỗi ngày, hãy chỉnh sửa crontab EDITOR=nano crontab -evà thêm một mục như thế này:

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

lúc 23:59 <<< 'osascript -e "thoát ứng dụng \" Mail \ ""; pmset ngủnow 'không làm việc cho tôi. Nó nói "công việc 1 lúc Sat ngày 30 tháng 4 12:47:00 năm 2016" nhưng không chạy lệnh khi thời gian đến
oluckyman

0

Đây là mã sẽ đợi một vài giây trước khi thoát khỏi ứng dụng hiện tại và đi ngủ.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.