Applescript - arka plan uygulamasını etkinleştirme çalışmıyor


4

Bu neden çalışmıyor

tell application "System Events"
    set AppName to name of every process whose background only is false
    tell application (some item of AppName)
        activate
    end tell
end tell

bu süre

Eserleri

global AppName
tell application "System Events"
    set AppName to name of every process whose background only is false
end tell

tell application (some item of AppName)
    activate
end tell

Açıkçası, bunun kapsamla ilgisi var ama nedenini ya da ne olduğunu anlamıyorum.


2
Kapsam ile ilgili değil, hayır, komutların nereye yönlendirildiği ve hangi uygulama veya komut dizisinin yürütülmesini işlediği ile ilgili. tell applicationİlk komut dosyasında bir bloğu diğerinin içine yerleştirdiniz. Belirli bir durumda bunu yapmak için birçok iyi neden vardır, ancak bu, bunlardan biri değildir; çünkü Sistem Olayları diğer uygulamalara gerçekten komut veremez ve activatebelirsiz bir şekilde hem Sistem Olaylarını hem de başka bir uygulamayı potansiyel olarak hedef alır , bu nedenle büyük olasılıkla sona erer. Sistem Olaylarını tercihli olarak etkinleştirme . Saniyendeki iki tellbloğu ayırmak işe yarıyor.
CJK

2
global AppNameDeklarasyon gereksiz olduğunu.
CJK

Yanıtlar:


5

Bence sorun şudur: Bir uygulamaya aktif hale getirilmesini söylemek, "Standart İlaveler" tarafından yönetilir, ancak sizden bu eylemi ele alması için "Sistem Olayları" nı istiyorsunuz.

tell application "System Events" to set AppName to name of ¬
    every process whose background only is false
tell application (some item of AppName) to activate

İhtiyacın yok my. tell application (some item of AppName) to activateyeterli.
CJK

Evet haklısın. Bununla birlikte, bir uygulama tell bloğu içindeki değişkeni ayarlarsanız, farklı bir uygulamanın tell bloğundaki o değişkene atıfta bulunursanız, "benim" veya "bunun" kullanılması gerekli olur. Ben LOL düşünüyorum
wch1zpink 15:18

Bu özelliklerle ve işleyicilerle ilişkili, değişkenlerle değil, öyle değil mi?
CJK

3

Sana bir hikaye anlatayım:

Bir ebeveyn kalktı ve üç çocuğa seslendi:

  • Ace - uyan ve git bana bir elma getir
  • Deuce - uyan ve git bana bir elma getir
  • Trey - uyan ve git bana bir elma getir

Bu ebeveyn üç elmayı ve herkesi yataktan çıkardığı için mutluydu.

Diğer ebeveyn şöyle dedi:

  • Trey - uyan ve git bana bir elma getir (ya da Trey'e sorduklarını sanıyorlar - ne sorduklarına ya da kime soruldukları konusunda kesin olduklarından emin değiller)

Bu sizin için "işe yaramayan" eşleşiyor mu?

Eğer öyleyse - harika. Değilse, Komut Dosyası Düzenleyicisi'nde her komut dosyası arasında gezinmek ve programlarınızın "komut dosyası dışında" nereye gittiğini görmek istersiniz. Ayrıca https://latenightsw.com Script Debugger'a bir göz atmayı da teşvik ediyorum - ücretsiz olarak bazı temel işlevler kullanıyor, ancak zamanınızı Apple'ın daha basit bir editöründe yazdığınızdan daha fazla değer veriyorsanız, $ değerinde olabilir. Tam sürüm için size $.

Ayrıca, yineleme veya döngüler üzerine bir kitap, her şey açık değilse, gidilmesi gereken iyi bir yer olabilir. Kendinizi kötü hissetmeyin, burası yanılmak ve öğrenmek için harika bir yer - döngüler kazandıktan sonra, sadece AppleScript ile değil, herhangi bir betik dilinde de şaşırtıcı şeyler yapabilirsiniz.


1
İnşallah 145k itibarını aynen böyle cevaplarla kazanmışsındır. Bu mükemmel. Tüm StackExchange cevaplarının soyut benzetmeler olmasını diliyorum.
CJK

Ouch - Sanırım;)
bmike

2
Hayır, bu cevabı gerçekten seviyorum. Mutlaka + 1'lemek istemiyorum ama kesinlikle ❤ yapmak istiyorum.
CJK

2
Peki @CJK o zaman tür yorum için gerçekten minnettarım. Beni gerçekten zorlayan ve belirli bir +1 veya -1 değil, ve bu soyut bir cevabın gerçekten iyi sonuçlanmadığını ve bunu da anlayabiliyorum.
bmike

Sevdim! :) Hikaye anlatma, bir mesajı öğretmenin ve / veya iletmenin kesinlikle en iyi yollarından biridir!
Monomeeth

1

Çalışırken arka planda Kontakt'taki "Tamam" düğmesini tıklamaya çalışıyordum. Bu benim sorunumu çözdü:

tell application "System Events"
    if exists of application process "Kontakt 5" then
        tell application "Kontakt 5.6.0" to activate
        delay 0.5
        repeat
            try
                click UI element "OK" of window 1 of application process "Kontakt 5"
            end try
        end repeat
    end if
end tell
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.