2011-03-13 1 views
11

मैं विंडो शीर्षक प्राप्त करने के लिए इस कोड का उपयोग कर रहा हूं:मैकॉक्स: सबसे प्रमुख विंडो शीर्षक प्राप्त करें

tell application "System Events" 
    set frontApp to name of first application process whose frontmost is true 
end tell 

tell application frontApp 
    set window_name to name of front window 
end tell 

हालांकि, यह कुछ मामलों में विफल रहता है। स्पष्ट रूप से यह विफल रहता है जब कोई खुली खिड़की नहीं होती है लेकिन यह ठीक है। हालांकि, कुछ मामलों में, उदाहरण के लिए Texmaker के लिए, यह एक त्रुटि के साथ विफल रहता है। यह पूर्वावलोकन के लिए भी काम नहीं करता है।

टेक्समेकर जैसे मामलों के लिए भी विंडो शीर्षक प्राप्त करने का कोई तरीका क्या होगा?

उत्तर

17

यह हमेशा काम करने के लिए लगता है:

global frontApp, frontAppName, windowTitle 

set windowTitle to "" 
tell application "System Events" 
    set frontApp to first application process whose frontmost is true 
    set frontAppName to name of frontApp 
    tell process frontAppName 
     tell (1st window whose value of attribute "AXMain" is true) 
      set windowTitle to value of attribute "AXTitle" 
     end tell 
    end tell 
end tell 

return {frontAppName, windowTitle} 

here से विचार मिल गया। अल्बर्ट के जवाब के बंद

+1

इस कोड को किसी संबंधित कार्य के लिए अनुकूलित करने का प्रयास करते समय मैंने कुछ परेशानी में भाग लिया, और सोचा कि मैं इसे यहां इंगित करूंगा। यदि आप किसी विशेष कार्यक्रम पर इसका परीक्षण करने का प्रयास कर रहे हैं, तो आपको पहले 'सक्रिय करने के लिए आवेदन प्रक्रिया नाम' की आवश्यकता हो सकती है, ताकि 'प्रक्रिया नाम' वास्तव में सामने है, और एक्सएक्सैन त्रुटि नहीं करता है। –

+0

हाय अल्बर्ट, लाइन 'सेट विंडो टिटल टू ....' के बाद मैंने थसी लाइन को जोड़ा: 'इसे हमेशा शीर्ष पर "बनाने के लिए' स्तर 3 से सेट करें ', हालांकि यह कुछ भी नहीं किया। क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं - मैं इस विषय को लागू करने की कोशिश कर रहा था - http://www.macscripter.net/viewtopic.php?id=30100 - यहां तक। – Noitidart

+0

@ नोइटिडार्ट: आपको इसे एक अलग प्रश्न के रूप में पूछना चाहिए। – Albert

2

निम्न स्क्रिप्ट आज़मा कर देखें।

+0

ठीक है, यह टेक्समेकर के लिए काम करता है लेकिन यह पूर्वावलोकन के लिए विफल रहता है। – Albert

+0

यदि आप कोई छवि खोलते हैं तो यह केवल पूर्वावलोकन के लिए विफल रहता है। यदि आप एक पीडीएफ खोलते हैं तो यह पूर्वावलोकन के लिए काम करता है। – Albert

+0

यह तब काम नहीं करता जब हम किसी विशेष एप्लिकेशन को कम करते हैं। उदाहरण के लिए: यदि मैं क्रोम ब्राउज़र का उपयोग कर रहा हूं और यदि मैं इसे छोटा करता हूं तो यह क्रोम के रूप में frontAppName की रिपोर्टिंग जारी रखेगा। या इसे दूसरे शब्दों में डालने पर, जब कोई एप्लिकेशन कम हो जाता है तो फोकस उस एप्लिकेशन पर ही रहता है। –

4

भवन, मैं बजाय

global frontApp, frontAppName, windowTitle 

set windowTitle to "" 
tell application "System Events" 
    set frontApp to first application process whose frontmost is true 
    set frontAppName to name of frontApp 
    set windowTitle to "no window" 
    tell process frontAppName 
     if exists (1st window whose value of attribute "AXMain" is true) then 
      tell (1st window whose value of attribute "AXMain" is true) 
       set windowTitle to value of attribute "AXTitle" 
      end tell 
     end if 
    end tell 
end tell 

return {frontAppName, windowTitle} 

करना चाहते हैं यह एक हैक है और मैं कोई अनुभव नहीं है, लेकिन लाभ यह है कि यह कोई खिड़की हो, तो दुर्घटना नहीं करता है।