क्या ऐप्पलस्क्रिप्ट के साथ वर्तमान में चल रहे प्रोग्राम के विंडो टाइटल की सूची प्राप्त करने का कोई तरीका है?


0

मैं एक स्क्रिप्ट लिखने के लिए देख रहा हूं, जो वर्तमान में चल रहे सभी कार्यक्रमों के सभी विंडो टाइटल की एक सूची को आउटपुट करता है। क्या AppleScript के साथ ऐसा करने का कोई तरीका है? मैंने निम्नलिखित कोड चलाने की कोशिश की:

tell application "System Events"
    repeat with theProcess in (every process)
        if background only of theProcess is false then
            say (name of theProcess) as string
        end if
    end repeat
end tell

मैंने उसे एक फाइल में डाल दिया, जिसका नाम है lawl.scpt और फिर टर्मिनल में निम्नलिखित भाग गया:

$ osascirpt lawl.scpt

हालाँकि, यह केवल कुछ सेकंड के लिए रुकता है, फिर कुछ भी आउटपुट के बिना बाहर निकलता है।


इसे इस प्रकार देखें: apple.stackexchange.com/a/115373/46541
Buscar웃

देख यह प्रश्न , विशेष रूप से रेमंड द्वारा जवाब एक छोटे से समाधान के लिए।
Asmus

जवाबों:


1

मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं, जो वर्तमान में चल रहे सभी कार्यक्रमों के सभी विंडो टाइटल की एक सूची तैयार करती है।

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}]

शायद नहीं, अब मैं इसे कैसे करूँगा। से बेहतर फिल्टर है background only कुछ इस तरह दिखेगा: get the name of every window of (every process whose class of windows contains window)
CJK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.