2008-09-16 29 views
5

OS X 10.5 için herhangi bir uygulamanın Yardım menüsündeki Arama kutusuna odaklanan bir komut dosyası var. Anahtar bir kombinasyona sahibim ve Spotlight gibi, senaryoyu çalıştırdığımda açılmasını istiyorum. Bu yüzden, arama kutusunun zaten yazmaya odaklanmış olup olmadığını tespit etmek istiyorum ve eğer öyleyse, Yardım menüsünü tıklamak yerine Esc yazın.El kitabında, bir menü öğesinin seçilip/odaklandığını nasıl anlarım?

tell application "System Events" 
    tell (first process whose frontmost is true) 
     set helpMenuItem to menu bar item "Help" of menu bar 1 
     click helpMenuItem 
    end tell 
end tell 

Ve böyle bir şey düşünüyorum: o şimdi haliyle Burada

script

tell application "System Events" 
    tell (first process whose frontmost is true) 
     set helpMenuItem to menu bar item "Help" of menu bar 1 
     set searchBox to menu item 1 of menu of helpMenuItem 
     if (searchBox's focused) = true then 
      key code 53 -- type esc 
     else 
      click helpMenuItem 
     end if 
    end tell 
end tell 

... ama bu hatayı alıyorum:

Can’t get focused of {menu item 1 of menu "Help" of menu bar item "Help" of menu bar 1 of application process "Script Editor" of application "System Events"}.

Arama kutunun zaten odaklanmış olup olmadığını algılamak için komut dosyamı alabilmemin bir yolu var mı?


Ben working around it benim sorun çözüldü. Yine de bir menü öğesinin seçilip seçilmediğini nasıl kontrol edeceğimi bilmiyorum, bu yüzden bu konuyu açık bırakacağım.

cevap

2

Using/Geliştirici/Uygulamalar/Yardımcı Programlar/Erişilebilirlik Araçları/Erişilebilirlik Inspector.app, fare altında UI öğesinin özelliklerine bakmak için yerleşik erişilebilirlik sistemini kullanabilirsiniz. Bir öğe ve Yenile düğmesine odaklanmak için cmd-F7 eyleminin özel notunu alın. Ne yazık ki, öğe ve özellik isimleri doğrudan senaryo paketindekilerle uyuşmuyor, ancak Sistem Olayları sözlüğüne bakabilir veya genellikle doğru terminolojiyi tahmin edebilirsiniz.

Bunu kullanarak iki şeyi belirleyebilirsiniz. İlk olarak, focused özelliği, menu item üzerinde değil, ancak menu item içinde odaklanmış olan bir text field var. İkincisi, menü öğesinin bir selected özelliği vardır. Bu hala çalışmıyor olsa

tell application "System Events" 
    tell (first process whose frontmost is true) 
     set helpMenuItem to menu bar item "Help" of menu bar 1 

     -- Use reference form to avoid building intermediate object specifiers, which Accessibility apparently isn't good at resolving after the fact. 
     set searchBox to a reference to menu item 1 of menu of helpMenuItem 
     set searchField to a reference to text field 1 of searchBox 

     if searchField's focused is true then 
      key code 53 -- type esc 
     else 
      click helpMenuItem 
     end if 
    end tell 
end tell 

: Bununla

, ben ile geldi. Anahtar olay, söyleyebildiğim kadarıyla ateş etmiyor, bu nedenle metin alanındaki focused özelliğiyle ilgili bir şey hala hükümsüz olabilir.

Yine, çözümünüz click daha kolay görünüyor.

+0

'searchField'ın odaklandığı doğruysa, o zaman .. bu gerçekten apple script sözdizimi mi? bir kesme işareti ekleyerek? – abbood

4

Dahili anahtar kısayolu Cmd-? (Cmd-Shift-/) zaten böyle davranır. Odaklanmadıysa, anahtar odağı yardım menüsünün arama alanına taşır ve aksi halde menüyü reddeder.

1

Illustrator'da bazı dosya işlemleri için bunu kendim yapmaya ihtiyacım oldu.

tell application "Adobe Illustrator" 
activate 
tell application "System Events" 
    tell process "Illustrator" 
     set frontmost to true 
     set activeMenuItem to enabled of menu item "Unlock All" of menu "Object" of menu bar item "Object" of menu bar 1 
     if activeMenuItem is true then 
      tell me to beep 3 
     else 
      tell me to beep 2 
     end if 
    end tell 
end tell 
end tell 

Yapıldı: Burada

ben ile geldi budur.

Bu sorun olmadan çalıştı ve bir dosyayı yinelemek için kullanılabilir. Gelecekteki otomasyonumda bunu daha çok kez yapmak zorunda kalacağım.

İyi şanslar!

2

AXMenuItemMarkChar özniteliğini kullanmanız gerekir.

Örnek: menü öğesi kontrol edilir

tell application "System Events" 
    tell process "Cisco Jabber" 
     set X to (value of attribute "AXMenuItemMarkChar" of menu item "Available" of menu "Status" of menu item "Status" of menu "File" of menu bar item "File" of menu bar 1) is "✓" -- check if Status is "Availible"  
    end tell 
end tell 

, dönüş değeri , aksi takdirde missing value olduğunu.

Not: Bu sınama, yalnızca menüleri denetlenen uygulama şu an numaralı telefondan çalışıyorsa çalışır.