วิธีรับคุณสมบัติของแอปพลิเคชัน

ฉันต้องการรับ properties ของแอปพลิเคชัน (ชื่อถูกกำหนดเป็นอาร์กิวเมนต์บรรทัดคำสั่ง) โดยพื้นฐานแล้วฉันต้องการทราบว่า application_name ในอาร์กิวเมนต์บรรทัดคำสั่งอยู่ด้านหน้าสุดหรือไม่

นี่คือสิ่งที่ฉันทำ (มันได้ผลสำหรับฉัน)

tell application "Google Chrome"
    get properties
end tell

แต่เมื่อฉันพยายามทำสิ่งนี้:

on run argv
  tell application (item 1 of argv)
    get properties
  end tell
end run

ฉันได้รับข้อผิดพลาดเมื่อดำเนินการด้วยคำสั่ง osascript has_focus.scpt "Google Chrome"

สภาพแวดล้อม/mac/scripts/has_focus.scpt:56:66: ข้อผิดพลาดในการดำเนินการ: Google Chrome ได้รับข้อผิดพลาด: ไม่สามารถรับทุกคุณสมบัติได้ (-1728)

กรุณาช่วย.


person Nikhil Wagh    schedule 10.07.2020    source แหล่งที่มา


คำตอบ (2)


สิ่งนี้ไม่สามารถทำงานได้

อาร์กิวเมนต์ของ tell application ต้องเป็นค่าคงที่ (ตามตัวอักษร) เนื่องจากคำศัพท์เฉพาะทางได้รับการประเมิน ณ เวลาคอมไพล์

ข้อยกเว้นคือคุณสมบัติ version, frontmost และ running ที่แอปพลิเคชันใด ๆ ดึงข้อมูล คุณสมบัติเหล่านี้ได้รับการจัดระเบียบภายในเป็น Application Object และไม่ขึ้นอยู่กับพจนานุกรม AppleScript ที่มีอยู่

person vadian    schedule 10.07.2020
comment
คุณแน่ใจไหม? ฉันมีโค้ดอื่นที่ใช้ app_name เป็นอาร์กิวเมนต์และตรวจสอบว่าโค้ดกำลังทำงานอยู่หรือไม่ และทำงานได้ดี ดูสิ่งนี้: pastebin.com/wEL4X98w - person Nikhil Wagh; 10.07.2020
comment
ใช่ ฉันแน่ใจ มีคำสั่งสองสามคำสั่งใดๆที่แอปพลิเคชันตอบสนอง แม้ว่าจะไม่มีพจนานุกรม AppleScript ที่ชัดเจนก็ตาม เช่น isRunning, version และ frontmost สำหรับคำสั่งเหล่านั้น ไม่จำเป็นต้องแก้ไขคำศัพท์ - person vadian; 10.07.2020
comment
คุณคืออัจฉริยะ. ฉันแค่อยากจะรู้ว่าแอปของฉันอยู่แถวหน้าที่สุดหรือไม่ และไม่รู้ว่าฉันสามารถใช้ frontmost ได้ ขอบคุณมากครับท่าน - person Nikhil Wagh; 10.07.2020
comment
ถ้าเป็นไปได้คุณสามารถเพิ่มข้อความสุดท้ายของคุณในคำตอบได้หรือไม่? - person Nikhil Wagh; 10.07.2020

ฉันเห็นว่าคุณแก้ไขปัญหาผ่านการสนทนา และได้เรียนรู้เกี่ยวกับคุณสมบัติ frontmost สำหรับวัตถุ application

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

@vadian ถูกต้องโดยระบุ:

อาร์กิวเมนต์ของ tell application ต้องเป็นค่าคงที่ (ตัวอักษร) เนื่องจาก คำศัพท์เฉพาะทางได้รับการประเมิน ณ เวลารวบรวม

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

on run argv
    set [appName] to argv
    tell the application named appName ¬
            to return its «class pALL»
end run

จากนั้นในเทอร์มินัล:

osascript ~/Scripts/getAppProperties.applescript "Brave Browser"

«class ChBB»:«class CrBF» id 1, frontmost:false, «class ChOB»:«class CrBF» id 2,
class:application, name:Brave Browser, version:83.1.10.97

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


หมายเหตุ: การป้อนโค้ดไวยากรณ์ดิบลงใน Script Editor อาจยุ่งยากเล็กน้อย เนื่องจากระบบจะคอมไพล์ทันทีและคำศัพท์ใดๆ ที่ Script Editor หรือ AppleScript (เช่น properties ซึ่งมีฟีเจอร์ทั่วๆ ไปและมีโค้ดประเภทเดียวกัน) แต่คุณสามารถสร้าง AppleScript ในโปรแกรมแก้ไขข้อความธรรมดาใดก็ได้ หากคุณต้องคอมไพล์มันเป็นไฟล์ .scpt จริงๆ osacompile ก็จะทำเช่นนั้น

person CJK    schedule 10.07.2020