Dalam skrip saya mencoba menemukan jendela Terminal.app yang berisi perangkat tty tertentu dan menaikkan jendela itu ke atas. Inilah yang saya miliki di Applescript sejauh ini:
tell application "System Events"
set foundWin to false
if (name of processes) contains "Terminal" then
tell application "Terminal"
set theTabs to first tab of every window where tty is "$(tty)"
repeat with theTab in theTabs
if class of theTab is tab then
set theWin to (first window whose tabs contains theTab)
set selected tab of theWin to theTab
set foundWin to true
end if
end repeat
end tell
end if
if foundWin then
--RAISE THE WINDOW?!
end if
end tell
Di mana saya terjebak adalah bagian "menaikkan jendela".
Berikut beberapa hal yang tidak saya inginkan:
set frontmost of theWin to true
- ini membawa jendela ke depan kelompok Terminal.app windows tetapi tidak menaikkannya di atas jendela lain.
tell application "Terminal" to activate
- ini membawa setiap jendela Terminal ke depan dalam tumpukan besar. Saya hanya ingin satu jendela.
tell application "System Events"
set theSysWin to first window of process "Terminal" whose name is (name of theWin)
perform action "AXRaise" of theSysWin
end tell
Ini hampir berhasil, tetapi yang dilakukannya adalah menaikkan jendela terminal ke posisi # 2, masih di bawah jendela aktif (jika aplikasi yang aktif adalah sesuatu selain Terminal.app.)
click theSysWin at {10,50}
- sepertinya tidak melakukan apa-apa.
click first static text of theSysWin
- sepertinya tidak melakukan apa-apa.
Apakah ada cara untuk melakukan ini? Tidak harus dalam Applescript.
EDIT Saya menemukan halaman web ini ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) mengutip panggilan Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Saya tidak akrab dengan ObjC atau Cocoa, dan ini (pada akhirnya) dipanggil dari skrip shell, jadi tidak yakin ke mana harus pergi dari sana.
sumber
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Saya tidak cukup akrab dengan objc atau cocoa untuk tahu ke mana harus pergi dari sana.Anda dapat mengklik item menu aplikasi yang tidak aktif. Gunakan untuk mengklik item menu yang sesuai dengan jendela di menu Window .
Inilah yang perlu Anda masukkan ke dalam skrip Anda:
Meskipun tidak mengaktifkan program, jendelanya adalah yang paling depan.
sumber
Saya menyadari bahwa utas ini sudah cukup lama, tetapi saya berlari melintasinya saat melawan masalah yang sama dan yang lainnya mungkin juga. Sejauh yang saya tahu itu tidak dapat dilakukan di AppleScript mentah. Ini bisa dilakukan di AppleScriptObjC. Untuk menggunakan contoh dari @Daniel Beck, versi baru akan seperti ini.
Kode yang ditambahkan akan menggunakan NSWorkspace kelas Cocoa untuk "meluncurkan" aplikasi, yang hanya memunculkan jendela depan aplikasi itu ke depan dengan fokus. Untuk detail lebih lanjut tentang proses yang membawa saya ke ini, saya memiliki artikel yang lebih lengkap di situs web saya di sini .
sumber
Inilah upaya lain, diuji pada macOS High Sierra. Sayangnya, ini hanya berfungsi ketika jendela yang diberikan ada di desktop saat ini! API AppleScript untuk mengontrol windows tampaknya tidak lengkap, membuat ini tidak mungkin.
Ganti "Safari" dan "WhatsApp" untuk kasus penggunaan Anda.
Ini memang (tampak) meningkatkan windows dalam dua langkah, namun. Pertama-tama menaikkan jendela ke bagian atas jendela aplikasi, dan hanya kemudian menaikkannya ke bagian atas semua jendela. Tidak sempurna, tetapi fungsional.
sumber