Erişilebilirlik onayı gerektirmeden en son Pid penceresine odaklanın


0

Şu anda bu AppleScript'i odağı bir PID'nin en son penceresine ayarlamayı denemek için kullanıyorum, mesela işte pid 450.

tell application "System Events"
  set frontmost of the first process whose unix id is 450 to true
end tell

Bu harika çalışır, erişilebilirlik onayı istemez. Tuhaflıklar olsa da:

  • Küçültülmüş pencereleri yok sayar, böylece tüm pencereler küçültülürse hiçbir şey odaklanmaz
  • Birden çok alanda pencereleriniz varsa ve en son erişilen pencere X alanındaysa, Y alanındaysanız ve o uygulamanın Y alanında da pencereleri varsa, Y alanında en son kullanılan odağı odaklar.
  • Henüz karşılaşmadım, ancak görünüşe göre insanlar başka uygulamaların bir penceresinin pencerenin tepesinde olması durumunda en üste çıkmayacağını söylüyor.

perform action AXRaiseAncak bunun erişilebilirlik api onayı gerektirdiğini biliyorum . Eklentimdeki kullanıcılar bunu, çoğu uygulamanın, özellikle ilk açılan pencerede izin vermeyi özlüyorsa, tek bir uygulamanın erişimine izin vermekle uğraşırken kaldırmasını istiyor.

Yani bu, el yazısı ile yapıldı, eğer karbonda (çekirdek temel, çekirdek grafikler) ya da kakaoda bunu nasıl kullanabileceğimi biliyorsanız.

Osx 10.9'da AXMakeProcessTrustedkullanımdan kaldırıldı, aksi takdirde kullanıcıları rahatsız etmeden uygulamama erişim izni vermek için kullandım ve sonra AXUIElementSetAttributeValuebir pencereyi öne getirmek için kullandım .

Lütfen yardım

Yanıtlar:


1

Bu, ilk tuhaflığı düzeltir, ikinciyi düzeltmez:

tell application "System Events"
    bundle identifier of process 1 whose id is 1234
end tell
tell application id result
    reopen
    activate
end tell

Aynı şey için de geçerlidir open:

open -a "$(ps -p 1234 -o comm=)"

Açık pencere yoksa, reopenyeni bir varsayılan pencere açar ve tüm pencereler simge reopendurumuna küçültülmüşse, bir pencereyi küçültür. activateUygulamayı ön planda tutar.

activateve frontmosttrue ayarının yapılması tüm pencereleri open -akaldırır, ancak yalnızca bir pencereyi kaldırır.

düşündüm

lsappinfo launch ASN="$(lsappinfo find pid=1234)"

belki de işe yarayabilir, ancak zaten çalışan bir uygulamayı başlatmaya çalışırken bir hata alıyorum.


Çok çok teşekkür ederim!! Bununla mücadele ediyordum! Bunu yarın test edip rapor edeceğim. :) Yani üçüncü sayı (üçüncü mermi) bahsettiğim bir sorun değil mi?
Noitidart

Birisi bana bunu en son pencereyi almak için denememi söyledi ama sanırım erişilebilirliği kullanıyor. tell (1st window whose value of attribute "AXMain" is true) *(linebreak)* set theWindow to value of attribute "AXTitle" *(linebreak)* end tell
Noitidart

Merhaba arkadaş, ilk senaryoda yanlış bir tip olduğunu düşünüyorum. 1 whose unix id is 1234Unix olması gerektiğini düşünüyorum . yukarıda sadece 1 whose id is 1234(unix wihtout) lütfen doğrulayabilirsiniz
Noitidart

Lütfen open -a "$(ps -p 1234 -o comm=)"yönteme biraz ışık verebilir misiniz ? Terminalden koştum, çalışan firefox'um var. Bir pid 303 ve diğeri 475'tir. Bu yöntemle her iki PID de 303 PID’ine odaklanır. Sizce ikinci firefox’u ilk firefox’tan gelen bir komuttan açtım mı? İşte benim PS dökümü: gist.githubusercontent.com/Noitidart/ef5d2fa9e526ec93d761/raw/… teşekkür ederim efendim!
Noitidart

Merhabalar, efendim, ileriki testlerden sonra, bu çözümde paylaşılan her iki yöntem de, hem open -ade el yazısı, tek bir firefox sürecini hedef alıyor gibi görünüyor. Çok ilginç. Üstteki betiğimde buna sahip değil. Şiddetle inanıyorum çünkü ilk defa Firefox'un ikinci örneğini açıyorum, bunun doğru olduğunu düşünüyor musunuz? Nasıl tamir edileceği konusunda fikri olan?
Noitidart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.