ฉันจะสร้าง AppleScript ที่จะออกจากแอปพลิเคชันในเวลาที่กำหนดแล้วทำให้คอมพิวเตอร์เข้าสู่โหมดสลีปได้อย่างไร


8

ฉันเล่นกับ AppleScript และ Automator เพื่อให้ได้งานนี้ แต่ฉันก็ไม่สามารถคาดศีรษะได้ หากใครสามารถแสดงตัวอย่างให้ฉันหรือให้คำแนะนำบางอย่างเกี่ยวกับวิธีที่ฉันสามารถตั้งค่าแอปพลิเคชันให้ปิดในเวลาที่กำหนดและจากนั้นให้คอมพิวเตอร์เข้าสู่โหมดสลีปหรือปิดเครื่อง


คุณต้องการทำสิ่งนี้เป็นประจำหรือเป็นสิ่งที่คุณต้องการเริ่มต้นด้วยตนเองหรือไม่
ephsmith

คุณเขียน AppleScript แล้วหรือยัง?
ephsmith

มันเป็นสิ่งที่ฉันต้องการจะทำอย่างสม่ำเสมอและไม่ต้องกังวลกับการเริ่มต้น ฉันเขียนสคริปท์แล้ว แต่มันก็ค่อนข้างยุ่งดังนั้นฉันจึงทิ้งมันลงไปและจบลงที่นี่ ขอบคุณสำหรับคำตอบ. ฉันจะให้มันเป็นไปและหวังว่ามันจะเคลียร์ปัญหาที่ฉันมี
Tomás Richardson

หากคุณต้องการให้งานนี้ทำอย่างสม่ำเสมอการกำหนดเวลางานatไม่ใช่สิ่งที่คุณต้องการ หรือcron launchdถ้าคุณต้องการอินเทอร์เฟซที่ง่ายกว่าในการตั้งค่าบางทีlingon 3อาจช่วยได้
ephsmith

คำตอบ:


14

ฉันสมมติว่าคุณต้องการเริ่มต้นกระบวนการนี้แทนการเรียกใช้ตามเวลาที่กำหนด

วิธีการของฉันจะเริ่มต้นจากบรรทัดคำสั่ง แต่คำสั่งใด ๆ สามารถเรียกใช้ในองค์ประกอบเชลล์สคริปต์ของสคริปต์ Automator ด้วยการปรับเปลี่ยนบางอย่าง วิธีการต่อไปนี้รวมองค์ประกอบบางอย่างเพื่อให้งานเสร็จสมบูรณ์:

  1. tellคำสั่งเพื่อออกจากโปรแกรมประยุกต์
  2. การเรียกบรรทัดคำสั่งเพื่อให้คอมพิวเตอร์เข้าสู่โหมดสลีป
  3. การเรียกบรรทัดคำสั่งเพื่อกำหนดเวลา 1 และ 2 ตามเวลาที่กำหนด

1. บอกแอปพลิเคชันให้ออก

สิ่งนี้สามารถทำได้ง่ายเพียง:

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

2. กำหนดให้คอมพิวเตอร์เข้าสู่โหมดสลีป

ดูpmsetรายละเอียดเพิ่มเติม แต่การออกคำสั่งต่อไปนี้จะทำให้คอมพิวเตอร์ของคุณเข้าสู่โหมดสลีป:

pmset sleepnow

3. กำหนดเวลาการดำเนินการที่จะดำเนินการในเวลาที่กำหนด

ดูที่คำสั่งat คำสั่งนี้ให้ความสามารถในการระบุเวลาสำหรับคำสั่งให้เรียกใช้ คุณจะต้องเปิดใช้งานฟังก์ชั่นนี้เนื่องจากไม่ได้เป็นค่าเริ่มต้น หากต้องการเปิดใช้งานatrundaemon ให้เรียกใช้คำสั่งต่อไปนี้[reference on 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 และทำให้คอมพิวเตอร์เข้าสู่โหมดสลีปเมื่อเวลา 23.00 น. ฉันจะสร้างไฟล์ที่มีคำสั่งที่ฉันต้องการเรียกใช้ดังนี้

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

บันทึกไฟล์quit-and-sleepนั้นและเรียกใช้บนบรรทัดคำสั่ง

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

คำเตือน

ฉันไม่ได้ทำการตรวจสอบใด ๆ เพื่อให้แน่ใจว่าเมลปิดจริง สคริปท์ก็สันนิษฐานว่าไม่มีอะไรที่จะทำให้คอมพิวเตอร์เข้าสู่โหมดสลีป ฉันทำให้มันง่ายที่นี่เป็นจุดเริ่มต้นสำหรับสิ่งที่คุณต้องการ


1

นี่คือแอปพลิเคชันเวอร์ชันเคร่งครัดที่ทำสิ่งนี้ได้สำเร็จโดยให้ค่าเวลาตายตัว แน่นอนคุณสามารถทำให้ส่วนนี้เป็นแบบโต้ตอบหากคุณต้องการ นอกจากนี้เวอร์ชันนี้จะถือว่าสตริงเวลาเกี่ยวข้องกับวันนี้

--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 "ออกจากแอป \" Mail \ ""; pmset sleepnow 'ไม่ทำงานสำหรับฉัน มันบอกว่า "job 1 at Sat 30 Apr 12:47:00 2016" แต่จะไม่รันคำสั่งเมื่อถึงเวลา
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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.