2008-09-16 13 views
5

मेरे पास ओएस एक्स 10.5 के लिए एक स्क्रिप्ट है जो किसी भी एप्लिकेशन के हेल्प मेन्यू में सर्च बॉक्स पर केंद्रित है। मेरे पास यह एक महत्वपूर्ण संयोजन है और स्पॉटलाइट की तरह, मैं स्क्रिप्ट चलाने पर इसे टॉगल करना चाहता हूं। तो, मैं यह जानना चाहता हूं कि खोज बॉक्स पहले से टाइप करने के लिए केंद्रित है या नहीं, और यदि ऐसा है, तो सहायता मेनू पर क्लिक करने के बजाय Esc टाइप करें।एप्पलस्क्रिप्ट में, मैं कैसे पता लगा सकता हूं कि मेनू आइटम का चयन/केंद्रित है या नहीं?

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 

और मैं कुछ इस तरह की सोच रहा हूँ:

यहाँ स्क्रिप्ट के रूप में यह अब खड़ा है

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 

... लेकिन मैं इस त्रुटि मिलती है:

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"}.

तो क्या कोई तरीका है कि मैं अपनी स्क्रिप्ट को यह पता लगाने के लिए प्राप्त कर सकता हूं कि खोज बॉक्स पहले से ही केंद्रित है या नहीं?


मैं working around it से मेरी समस्या हल। मुझे अभी भी पता नहीं है कि कैसे मेनू आइटम चुना गया है या नहीं, इसलिए मैं इस विषय को खुला छोड़ दूंगा।

उत्तर

2

उपयोग/डेवलपर/एप्लिकेशन/उपयोगिताओं/अभिगम्यता उपकरण/अभिगम्यता इंस्पेक्टर.एप आप माउस के नीचे यूआई तत्व के गुणों को देखने के लिए अंतर्निहित पहुंच प्रणाली का उपयोग कर सकते हैं। किसी तत्व और ताज़ा करें बटन पर फ़ोकस लॉक करने के लिए cmd-F7 कार्रवाई का विशेष नोट लें। अफसोस की बात है कि तत्व और संपत्ति के नाम सीधे स्क्रिप्ट सूट में उनसे मेल नहीं खाते हैं, लेकिन आप सिस्टम इवेंट्स के लिए शब्दकोश को देख सकते हैं या आमतौर पर सही शब्दावली का अनुमान लगा सकते हैं।

इसका उपयोग करके आप दो चीजें निर्धारित कर सकते हैं। सबसे पहले, focused संपत्ति menu item पर नहीं है, बल्कि के भीतर text field है जो केंद्रित है। दूसरा, मेनू आइटम में selected संपत्ति है।

इस के साथ

, मैं के साथ आया था:

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 

हालांकि यह अभी भी काम नहीं करता। जहां तक ​​मैं कह सकता हूं, मुख्य घटना फायरिंग नहीं कर रही है, इसलिए टेक्स्ट फ़ील्ड पर focused संपत्ति के साथ कुछ भी अजीब हो सकता है।

वैसे भी, आपके click फिर से समाधान बहुत आसान लगता है।

+0

'यदि सर्चफिल्ड का ध्यान केंद्रित सत्य है तो .. क्या वास्तव में सेब स्क्रिप्ट वाक्यविन्यास है? एक एस्ट्रोफ़े जोड़ना? – abbood

4

अंतर्निहित कुंजी शॉर्टकट सीएमडी-? (सीएमडी-शिफ्ट-/) पहले से ही इस तरह व्यवहार करता है। यह मदद मेनू के खोज फ़ील्ड पर महत्वपूर्ण फोकस करता है यदि यह पहले से केंद्रित नहीं है, और अन्यथा मेनू को खारिज कर देता है।

1

मुझे इलस्ट्रेटर में कुछ फ़ाइल प्रोसेसिंग के लिए इसे स्वयं करने की आवश्यकता पूरी हो गई।

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 

डन:

यहाँ मैं के साथ आया है।

यह कोई समस्या नहीं है और फ़ाइल को फिर से चलाने के लिए उपयोग किया जा सकता है। मुझे शायद अपने भविष्य के स्वचालन में यह कई बार करना होगा।

शुभकामनाएं!

2

आपको AXMenuItemMarkChar विशेषता का उपयोग करने की आवश्यकता है।

उदाहरण: मेनू आइटम चेक किया गया है

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 

हैं, वापसी मान है, अन्यथा यह missing value है।

नोट: यह परीक्षण केवल तभी काम करता है जब आवेदन के मेनू का निरीक्षण किया जा रहा है वर्तमान में फ्रंट है।

संबंधित मुद्दे

 संबंधित मुद्दे