मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं, जो वर्तमान में चल रहे सभी कार्यक्रमों के सभी विंडो टाइटल की एक सूची तैयार करती है।
AppleScript में इसे प्राप्त करने का आसान, एक-लाइनर तरीका है:
tell application "System Events" to get the name of every window of ¬
(every process whose background only is false)
वार्षिक रूप से, यह एक नेस्टेड सूची देता है, जिसे आपको या तो एक में लूप करना होगा repeat with
ब्लॉक करें, या एक साधारण सूची में घोंसले को सपाट करें (जो बहुत कठिन नहीं है)।
कमांड लाइन से AppleScript चलाने से यह फायदा होता है कि लौटाया गया डेटा टेक्स्ट फॉर्मेट में होता है, जिसमें काफी आसानी से हेरफेर किया जा सकता है। आप प्रत्येक का लाभ पाने के लिए AppleScript के भीतर से कमांड लाइन का उपयोग भी कर सकते हैं:
do shell script "osascript -e \" ¬
set text item delimiters to tab
tell app \\\"system events\\\" to get name of every window of ¬
(every process whose background only is false)
return the result as text \" | egrep -oi -e '[^\t]+'"
return paragraphs of result
जो खिड़की के शीर्षों की एक अच्छी, सीधी आगे, पाठ सूची देता है।
अंत में, यहाँ काम करने के लिए एक औपचारिक AppleScript ठीक है, एक तरह से जो आपको विंडो ऑब्जेक्ट को संदर्भित करने की क्षमता बनाए रखने की अनुमति देता है यदि आपको अन्य गुण प्राप्त करने या इसे हेरफेर करने की आवश्यकता है:
use application "System Events"
property R : {WindowTitle:missing value, AttachedToProcess:missing value}
set WindowList to {}
set P to a reference to (every process whose background only is false)
repeat with proc in P
set [proc] to proc
set W to (a reference to every window of proc)
repeat with _w in W
set [_w] to _w
copy R to end of WindowList
tell last item of WindowList
set its WindowTitle to title of _w
set its AttachedToProcess to name of proc
end tell
end repeat
end repeat
return WindowList
परिणामी सूची उन अभिलेखों की एक सूची है जिनकी संरचना है property R
। प्रत्येक रिकॉर्ड एक एकल खिड़की का प्रतिनिधित्व करता है, जिसमें खिड़की का शीर्षक और उस प्रक्रिया का नाम होता है, जिसका नाम उदा। {WindowTitle:"Downloads", AttachedToProcess:"Finder"}
। इस तरह, विंडो के साथ चीजों को करना आसान है, जैसे:
set TheWindow to item 2 of WindowList --> {WindowTitle:"...", AttachedToProcess:"..."}
tell process named (TheWindow's ProcName) to ¬
tell window named (TheWindow's WindowTitle) to ¬
set [focused, position, size] to [true, {0, 0}, {400, 777}]