Tüm uygulamalarda otomatik olarak çalışması için AppleScript'te bir “Sistem Olayları” komutu nasıl yeniden işlenir?


4

Bir Hizmet'te "Run AppleScript" eyleminde aşağıdaki AppleScript kodu ile:

tell application "System Events"
    set theSBounds to {{572, 64}, {332, 515}}
    set position of window "Google Hangouts - myemailaddress@gmail.com" of application process "Google Chrome" to item 1 of theSBounds
    set size of window "Google Hangouts - myemailaddress@gmail.com" of application process "Google Chrome" to item 2 of theSBounds
end tell

Hizmet yalnızca, bu Hizmetin çağrıldığı uygulama "Aşağıdaki denetimlerin bilgisayarınızı denetlemesine izin ver" altındaki uygulamalar listesine eklenmişse çalışır. Bu liste Sistem Tercihleri ​​→ Güvenlik ve Gizlilik → Erişilebilirlik bölümünde bulunur.

AppleScript kodunu bir şekilde değiştirmek mümkün mü, böylece bir bilgisayardaki her uygulamayı listeye eklemek gerekli değil mi? Veya, bir kişinin bilgisayardaki her uygulamanın aksine listeye yalnızca bir öğe eklemesi gerekir.

Bunun gibi bir şeyin işe yarayabileceğini düşündüm:

do shell script "osascript -e 'tell application \"System Events\"' -e 'set theSBounds to {{572, 64}, {332, 515}}' -e 'set position of window \"Google Hangouts - myemailaddress@gmail.com\" of application process \"Google Chrome\" to item 1 of theSBounds' -e 'set size of window \"Google Hangouts - myemailaddress@gmail.com\" of application process \"Google Chrome\" to item 2 of theSBounds' -e 'end tell'" with administrator privileges

ancak bu kod ayrıca, Hizmetin çalıştırıldığı uygulamanın Erişilebilirlik listesine eklenmesini gerektirir.

Not: Bu AppleScript'i yalnızca Hizmet olarak çalıştırmak istiyorum, Automator tarafından oluşturulan bir Uygulamada değil, kod seçili metni giriş olarak aldığından (sistem genelinde) çalıştırmak istiyorum.


Bu betiği hizmet olarak kullanmaya ölü müsünüz? Neden sadece komut dosyasını bir komut dosyası düzenleyicisi aracılığıyla uygulama olarak kaydetmiyorsunuz? Ardından, sistem tercihlerinde erişilebilirliğe izin vermek için yalnızca bir uygulamayı eklemeniz gerekir. Ardından bir adım daha ileri götürebilir ve uygulamayı konuşabilir hale getirebilir ve bir dikte komutuyla istediğiniz zaman başlatabilirsiniz.
wch1zpink

Önerin için teşekkürler. Tam kodunu göndermek istemedim, çünkü sorumla ilgili değil, ancak içinde kodun o anda vurgulanmış olan metni girdi olarak kabul ettiğini göreceksiniz. Seçili metni panoya kopyalamak yerine, bir uygulama dosyası olarak bir AppleScript seçime erişemiyor. Ayrıca, seçili metni alabilen ve onu bir AppleScript değişkenine gönderebilen üçüncü taraf bir programın bile farkında değilim.
rubik küresi

İkinci noktada, bir zamanlar Mac'in Dikte Komutları özelliğinin (kısa) bir kullanıcısıydım. Ancak sonunda kullanmanın güvenilir olmadığını gördüm. Konuşmam dikteyi zamanın sadece% 10'unu bile tetiklemiyorsa, uygulamayı menü çubuğundan veya klavye kısayoluyla başlatmak, dikteğime doğru duymaktan daha kolay.
rubik küresi

Bu, bir otomasyon süreci boyunca bilgisayarı kontrol eden her uygulamaya izin vermek zorunda kalması nedeniyle otomasyonun dezavantajlarından biridir. Bu yüzden gerektiği kadar uygulama eklemeniz gerekecek. Eminim duymak istediğin cevap bu değil, sorduğun soruyu cevaplıyor mu, yoksa sorduğun şeyi anlamıyorum?
user3439894

@ user3439894 Doğru anladığınızı düşünüyorum. Sorumu belirtebileceğim başka bir yol daha var: Aynı etkiyi gerçekleştirmek için kullanabileceğim "Sistem Olayları" yerine geçecek bir yedek var mı? AppleScript'teki "Sistem Olayları" ile ilgili sorun, komutu çalıştırmak için "Sistem Olayları" uygulamasını kullanmak yerine, şu anda komutu çalıştırmak için açık olan herhangi bir uygulamayı kullanmasıdır (/ System / Library / CoreServices / adresinde bulunur). Sistem Olayları.app).
rubik küresi

Yanıtlar:


2

İyi bir çözüm buldum (yani, geçici çözüm).

"Sistem Olayları" kod bloğunu "Run AppleScript" eylemine ekleyin ve Automator'da kendi uygulama dosyası olarak kaydedin. Not: Bunun çalışması için bu kodun dosya uzantısı .app olmalıdır (birazdan bu konuda daha fazla).

Sistem Tercihleri ​​→ Güvenlik ve Gizlilik → Gizlilik sekmesi → Erişilebilirlik seçeneğine gidin. Bilgisayarınızı kontrol etmesine izin verilen uygulamalar listesine yeni oluşturulan uygulamayı ekleyin ve işaretleyin.

Yeni oluşturulan uygulamayı Servisinizden çalıştırın. Bunu yapmak için, AppleScript kodunuza aşağıdaki satırı ekleyebilirsiniz:

do shell script "osascript -e 'tell application \"Application Name\" to activate'"

( Bir Servis'te "AppleScript Çalıştır" eylemini kullanırken osascript, activateuygulamada keşfettiğim Hizmetler ile ilgili bir hatayı gideren uygulamaları alışkanlıkla kullanıyorum .)

Yalnızca bir uygulamaya ("Sistem Olayları" kodunu içeren) uygulamasına açıkça izin verilmiş olmasına rağmen, Bilgisayarınızdaki her uygulamada Hizmetiniz mükemmel şekilde çalışmalıdır.

Dosya bir .scpt veya .applescript dosyası olarak değil, bir .app dosyası olarak kaydedilmelidir. Bunun nedeni, bilgisayarınızı denetlemenize izin verilen uygulamalar listesine .scpt veya .applescript dosyalarını eklemek mümkün olmamaktır; iletişim kutusunda yalnızca gerçek .app dosyaları seçilebilir.

.App dosyasının Automator'da oluşturulması gerekmediğini unutmayın. .App dosyasını Komut Dosyası Düzenleyicisi.app uygulamasında oluşturup diğer adımları izlerseniz, .app dosyası aynı şekilde çalışır.

Ancak bir fark var. .App dosyası Automator'da oluşturulduğunda , uygulamayı Servislerinde çalıştırmak için activateveya birini kullanabilirsiniz launch. Ancak, .app dosyası Komut Dosyası Düzenleyicisi'nde oluşturulduğunda, yalnızca activateuygulamayı çalıştırmak için kullanabilirsiniz ; launchhiçbir şeyin olmamasıyla sonuçlanacaktır.


1
Bunu kabul edilen cevap olarak işaretlemeyi unutmayın! :) Güzel bir geçici çözüm için +1!
user3439894

Teşekkürler, bir iş akışını aktive etmeye çalışırsam farklı bir hata aldım, ancak etrafınızdaki iş hala çalışıyor gibi görünüyor.
Matt
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.