Cara mendapatkan properti suatu aplikasi

Saya ingin mendapatkan properties Aplikasi (nama diberikan sebagai argumen baris perintah). Pada dasarnya saya ingin tahu apakah application_name dalam argumen baris perintah paling depan atau tidak.

Inilah yang telah saya lakukan (Ini berhasil untuk saya)

tell application "Google Chrome"
    get properties
end tell

Namun ketika saya mencoba melakukan ini:

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

Saya mendapatkan kesalahan saat menjalankannya dengan perintah osascript has_focus.scpt "Google Chrome"

environment/mac/scripts/has_focus.scpt:56:66: kesalahan eksekusi: Google Chrome mendapat kesalahan: Tidak dapat memperoleh semua properti. (-1728)

Tolong bantu.


person Nikhil Wagh    schedule 10.07.2020    source sumber


Jawaban (2)


Ini tidak bisa berhasil.

Argumen tell application harus berupa konstanta (literal) karena terminologi dievaluasi pada waktu kompilasi.

Pengecualian adalah properti version, frontmost dan running yang diambil oleh aplikasi apa pun. Properti ini diatur secara internal sebagai Objek Aplikasi dan independen dari kamus AppleScript yang ada.

person vadian    schedule 10.07.2020
comment
Apa kamu yakin? Saya memiliki beberapa kode lain yang menggunakan app_name sebagai argumen dan memeriksa apakah kode tersebut berjalan atau tidak, dan berfungsi dengan baik. Lihat ini: pastebin.com/wEL4X98w - person Nikhil Wagh; 10.07.2020
comment
Ya saya yakin. Ada beberapa perintah yang dapat ditanggapi oleh aplikasi apa pun – meskipun aplikasi tersebut tidak memiliki kamus AppleScript eksplisit – misalnya isRunning, version, dan frontmost. Untuk perintah-perintah tersebut, terminologi penyelesaian tidak diperlukan. - person vadian; 10.07.2020
comment
Anda jenius. Saya hanya ingin tahu apakah aplikasi saya paling depan atau tidak. Dan tidak tahu saya bisa menggunakan frontmost. Terima kasih banyak, Pak. - person Nikhil Wagh; 10.07.2020
comment
Jika memungkinkan, bisakah Anda menambahkan pernyataan terakhir Anda di jawaban? - person Nikhil Wagh; 10.07.2020

Saya melihat Anda memecahkan masalah Anda melalui diskusi, dan mempelajari tentang properti frontmost untuk objek application.

Jadi ini lebih merupakan tujuan untuk menyelesaikan apa yang awalnya Anda mulai.

@vadian benar dengan menyatakan:

Argumen aplikasi tell harus berupa konstanta (literal) karena terminologi dievaluasi pada waktu kompilasi.

Solusi untuk mengatasi hal ini adalah dengan tidak menggunakan terminologi. Terminologi mengharuskan aplikasi yang diinstruksikan dapat mencari terminologi yang digunakan dalam kamus skripnya, dan mengubahnya dari istilah yang mudah dipahami manusia menjadi kode peristiwa Apple mentah. Jadi singkirkan perantara, dan Anda dapat mengeluarkan pernyataan, memberikan perintah, dan mengambil properti melalui sintaks chevron mentah:

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

Kemudian, di terminal:

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

Tentu saja, tanpa pencarian kamus, properti khusus aplikasi dan nilainya dikembalikan dalam sintaksis mentah.


Catatan: Memasukkan kode sintaksis mentah ke dalam Editor Skrip bisa jadi sedikit rumit, karena kode tersebut akan langsung dikompilasi dan istilah apa pun yang dipahami oleh Editor Skrip atau AppleScript (seperti properties, yang memiliki fitur umum di seluruh papan dan dengan kode jenis yang sama). Namun Anda dapat membuat AppleScript di editor teks biasa apa pun. Jika Anda benar-benar harus mengkompilasinya menjadi file .scpt, maka osacompile akan melakukannya.

person CJK    schedule 10.07.2020