AppleScript รับแอปพลิเคชันที่ใช้งานอยู่


13

ฉันจะเรียกใช้รหัส (ตัวอย่างdisplay dialog("test")) อย่างไรโดยใช้ AppleScript เฉพาะเมื่อแอปพลิเคชั่น "Finder" อยู่ในโฟกัส / เปิดใช้งานอยู่


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

stackoverflow.com/questions/3718520/…ไม่ได้ใช้งานมีความเกี่ยวข้องแม้ว่าจะไม่สามารถแก้ปัญหาได้
วิลเลียม

คุณต้องชี้แจงคำถามของคุณ สคริปต์ในคำตอบของฉันใช้งานได้สำหรับคำจำกัดความที่กำหนดของ 'งาน' คือรายงานอย่างถูกต้องว่า Finder อยู่ข้างหน้าหรือไม่
Tetsujin

@Tetsujin อัพเดทแล้ว
William

คุณจะเปิดแอพ Applescript ได้อย่างไร แน่นอนว่าการคลิกสองครั้งที่แน่นอนจะแสดง Finder เป็นส่วนหน้า '2 ถึงล่าสุด' เสมอ การเปลี่ยนคำตอบ - วิธีนี้จะใช้งานได้หากถูกเรียกจากตัวแก้ไขสคริปต์ แต่ 'ล้มเหลว' หากดับเบิลคลิกใน Finder เพราะจะให้ผลบวกเท็จ
Tetsujin

คำตอบ:


18

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

tell application "System Events"
    set frontmostProcess to first process where it is frontmost
    set visible of frontmostProcess to false
    repeat while (frontmostProcess is frontmost)
        delay 0.2
    end repeat
    set secondFrontmost to name of first process where it is frontmost
    set frontmost of frontmostProcess to true
end tell

tell application (path to frontmost application as text)
    if "Finder" is in secondFrontmost then
        display dialog ("Finder was last in front")
    else
        display dialog (secondFrontmost & " was last in front")
    end if
end tell

ออกจากคำตอบก่อนหน้านี้ที่นี่เพื่อลูกหลาน

กลับคำตอบทั้งหมดหลังจากที่ไม่ได้อ่านคำถามอย่างถูกต้องในตอนแรก ;-)

tell application "System Events"
    set activeApp to name of first application process whose frontmost is true
    if "Finder" is in activeApp then
        display dialog ("test")
    else
        display dialog ("test2")
    end if
end tell

+1 แม้ว่าโซลูชันที่คุณเสนอจะไม่ทำงานตามที่เป็นอยู่ ฉันได้รับ "ทดสอบ" ตราบใดที่แอปพลิเคชันเปิดอยู่และไม่จำเป็นว่าจะทำงานหรือไม่
วิลเลียม

คิดใหม่ ... คำตอบที่แก้ไขแล้ว
Tetsujin

เขียนใหม่เสร็จสมบูรณ์ตอนนี้ฉันกลับมาที่เดสก์ท็อปแล้ว - ตอนนี้ทำสิ่งที่คุณถาม
Tetsujin

2
คุณสามารถแทนที่คำสั่งไดอะล็อกที่สองด้วยdisplay dialog (activeApp)เพื่อยืนยันว่าสคริปต์คิดว่าอยู่ตรงไหน
Kent

1
โปรดระวังสิ่งนี้ - ชื่อแอปของแอปบางตัว (เช่นtell application "app_name") แตกต่างจากชื่อกระบวนการ (เช่นset frontmost of process "app_process" to true)
BallpointBen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.