AppleScript mendapatkan Aplikasi aktif

13

Bagaimana saya menjalankan kode (misalnya display dialog("test")) menggunakan AppleScript hanya jika Aplikasi "Finder" saat ini dalam fokus / aktif.

William
sumber
Um, jika aplikasi sudah aktif, apa yang ingin Anda capai dengan mengaktifkannya lagi?
Kent
stackoverflow.com/questions/3718520/… idle relevan meskipun tidak menyelesaikan masalah.
William
Anda perlu mengklarifikasi pertanyaan Anda. Skrip dalam jawaban saya berfungsi, untuk definisi tertentu dari 'karya' yaitu melaporkan secara akurat apakah Finder paling depan atau tidak.
Tetsujin
@Tetsujin diperbarui
William
Bagaimana Anda akan meluncurkan aplikasi Applescript? Mengklik dua kali tentu saja akan selalu menampilkan Finder sebagai bagian paling depan 'ke-2'. Mengubah jawaban - ini akan berfungsi jika dipanggil dari Script Editor, tetapi 'gagal' jika diklik dua kali pada Finder, karena memberikan false-positif
Tetsujin

Jawaban:

18

Ini akan berfungsi jika skrip dipanggil dari Script Editor, karena 'keluar dari jalan' untuk memeriksa aplikasi berikutnya sejalan, tetapi akan gagal jika diklik dua kali dari Finder, karena Finder akan selalu menjadi yang terakhir dalam barisan.

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

Meninggalkan jawaban sebelumnya di sini untuk anak cucu

Rejig seluruh jawaban setelah tidak membaca pertanyaan dengan benar pada awalnya ;-)

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
Tetsujin
sumber
+1 Meskipun solusi yang Anda usulkan tampaknya tidak berfungsi sebagaimana mestinya. Saya mendapatkan "tes" selama aplikasi tersebut terbuka dan tidak harus apakah itu aktif atau tidak.
William
a rethink… jawaban yang diedit
Tetsujin
lengkap menulis ulang, sekarang saya kembali ke desktop saya - ini sekarang melakukan persis apa yang Anda minta.
Tetsujin
2
Anda juga dapat mengganti perintah dialog kedua dengan display dialog (activeApp)untuk mengonfirmasi dengan tepat apa yang dianggap skrip sebagai yang paling depan.
Kent
1
Hati-hati dengan ini - beberapa nama aplikasi aplikasi (misalnya, tell application "app_name") berbeda dari nama prosesnya (misalnya, set frontmost of process "app_process" to true).
BallpointBen