हर समय पृष्ठभूमि में कस्टम AppleScript कैसे चलाएं?


3

हर 30 सेकंड में एक ऐप्पल डायलॉग बॉक्स के चुनाव के लिए डिज़ाइन की गई AppleScript फ़ाइल को देखते हुए, मैं अपने मैक ओएस को आसानी से कैसे सेट कर सकता हूं ताकि यह AppleScript फ़ाइल हर बार पृष्ठभूमि में चुपचाप लॉगिन होने पर शुरू हो?

स्क्रिप्ट के लिए कोड (रुचि के मामले में) नीचे सूचीबद्ध है, और एयरमेल बीटा ऐप पर "बाद में" क्लिक करने के लिए डिज़ाइन किया गया है:

repeat
    if (exists application "AirMail Beta") then
        tell application "System Events" to tell process "Airmail Beta"
            if exists (button "Later" of front window) then
                click (button "Later" of front window)
            end if
        end tell
    end if
    delay 30
end repeat

उपर्युक्त स्क्रिप्ट काम करती है, लेकिन अगर कोई भी Apple Apple को लिखे बिना डायलॉग को ऑटो-क्लिक करने का बेहतर तरीका सोच सकता है जो हर कुछ सेकंड में पोल ​​करता है, तो टिप्पणियों में इस तरह के समाधान की पेशकश करने के लिए स्वतंत्र महसूस करें। मुख्य रूप से, मैं लगातार चलाने के लिए डिज़ाइन किए गए AppleScripts को प्रबंधित करने का सबसे अच्छा तरीका जानना चाहूंगा ताकि वे स्वचालित रूप से लॉगिन में देखे बिना सक्षम / अक्षम और स्टार्टअप हो सकें।

जवाबों:


7

मेरी राय में, ऐसा करने का सबसे अच्छा तरीका ऐप्पल के अपने कार्य अनुसूचक का उपयोग करना है: launchdक्योंकि आपको तीसरे पक्ष के सॉफ़्टवेयर को स्थापित करने की आवश्यकता नहीं है। सबसे पहले, सिद्धांत: कमांड लाइन से एक स्क्रिप्ट चलाने के लिए, आप बस चलाते हैं:

osascript /PATH/TO/YOUR/script.scpt

यह जानकर, आपको बस एक plistफ़ाइल बनानी होगी ~/Library/LaunchAgents/:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>air-mail-beta.job</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/osascript</string>
        <string>/PATH/TO/YOUR/SCRIPT</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

plistफ़ाइल का नाम मायने नहीं रखता है, लेकिन इसमें होना चाहिए ~/Library/LaunchAgents/। इसके अलावा, इसके /PATH/TO/YOUR/SCRIPTअनुसार परिवर्तन करना सुनिश्चित करें ।

अंत में, आपको केवल यह बताने की आवश्यकता है launchdकि आप चाहते हैं कि यह स्क्रिप्ट हमेशा चले। ऐसा करने के लिए, आप बस करें:

launchctl load -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist

और आपने कल लिया! यदि ऐसा लगता है कि स्क्रिप्ट शुरू नहीं हुई है, तो आप यह कर सकते हैं:

 launchctl start air-mail-beta.job

air-mail-beta.jobवह संपत्ति कहां है जिसके तहत <key>label</key>हमने plistफाइल में सेट किया है ।

अंत में, क्या आपको कभी स्क्रिप्ट को अक्षम करने की आवश्यकता है, unloadइसे इसके साथ मत भूलना :

launchctl unload -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist

मुझे पता है कि यह समाधान अधिक तकनीकी है, लेकिन मुझ पर भरोसा करें, यह आपके मुद्दे से निपटने का एक बेहतर तरीका है। यदि आपके कोई प्रश्न हैं, तो बस पूछें!


इस समाधान के लिए धन्यवाद। क्या फ़ाइल .jobमें कुछ भी होने का नाम हो सकता है .plist? मैंने एक रिवाज बनाने की कोशिश की है .plistऔर लगता है कि यह सफलतापूर्वक लोड हो रहा .plistहै launchhd, लेकिन स्क्रिप्ट ही शुरू नहीं होती है। launchctlबाद में करते समय मुझे टर्मिनल का कोई फीडबैक नहीं मिला । मुझे पता है कि स्क्रिप्ट काम करती है क्योंकि अगर मैं बस करता हूं तो osascript /PATH/to/script.scptयह वही करता है जो इसे माना जाता है।
विंटरफ्लैग्स

@Winterflags
सैंडविच

1

पहला कदम:

स्क्रिप्ट एडिटर में स्क्रिप्ट को सहेजते समय, एप्लिकेशन बंडल के रूप में सहेजें, फिर लॉगिन सिस्टम प्राथमिकताओं में इसे स्टार्टअप आइटम में जोड़ें।

चरण दो "पृष्ठभूमि"

मैक के लिए एक ऐप iBackground Scripts का उपयोग करें

बस एक AppleScript को खींचें और छोड़ें जिसे इस छोटी बूंद पर 'एप्लिकेशन बंडल' के रूप में सहेजा गया है। 'यस' बटन पर क्लिक करने से आपकी स्क्रिप्ट बैकग्राउंड में चलेगी और डॉक में प्रदर्शित नहीं होगी


मुझे यकीन नहीं है कि iBackground कैसे काम करता है, लेकिन यह सहेजे गए स्क्रिप्ट की जानकारी में क्या बदल रहा है, इस पर निर्भर करता है। ऐप पूरी पृष्ठभूमि में चल सकता है, जिसका अर्थ है कि आप इसे आसानी से नहीं छोड़ सकते क्योंकि यह अब एक प्रक्रिया की तरह काम करता है और इसमें कोई भी
Gi

आप इसे 'नहीं' बटन पर क्लिक करके रिवर्स कर सकते हैं और यह अब बैकग्राउंड स्क्रिप्ट नहीं होगी और डॉक में प्रदर्शित होगी। यदि आप तुरंत परिवर्तन नहीं देखते हैं, तो AppleScript को किसी अन्य स्थान पर ले जाएं (कमांड + ड्रैग)।
रूस

यदि आप इसे छोड़ना चाहते हैं, तो आप इसकी पुष्टि जीयूआई के माध्यम से नहीं कर सकते हैं यदि आप इस ऐप का उपयोग पृष्ठभूमि ऐप में परिवर्तन करने के लिए करते हैं।
मार्केन्टल

1

मेरा भी यही मुद्दा था। जब मैं अपने कंप्यूटर का उपयोग कर रहा था तो मैं बैकग्राउंड में kontakt पर "ओके" बटन पर क्लिक करने की कोशिश कर रहा था। इसने मेरे लिए काम करना खत्म कर दिया।

tell application "System Events"
    if exists of application process "Kontakt 5" then
        tell application "Kontakt 5.6.0" to activate
        delay 0.5
        repeat
            try
                click UI element "OK" of window 1 of application process "Kontakt 5"
            end try
        end repeat
    end if
end tell

0

आप अपनी पृष्ठभूमि स्क्रिप्ट को रोकने की दिनचर्या जोड़ सकते हैं। फिर आप अपनी पृष्ठभूमि की दिनचर्या को रोकने के लिए एक और स्क्रिप्ट लिखते हैं ... कुछ विधानसभा की आवश्यकता होती है।

किसी अन्य स्क्रिप्ट के कथन पर स्ट्रिंग को कैसे लागू करें:

on run
    set myApp to "/Applications/applescriptFiles/demo -- the best/b.app"
    -- some hocus pocus is nesessary to avoid applescript from change path.
    -- set myApp to POSIX file myApp

    tell application myApp

        launch
        stringSet("stringie set") -- this function is in the "b" app.
    end tell
end run


(* 

save this as an application bundle 

invoked by a.app.  

twtwtw write in:
https://discussions.apple.com/thread/4917321?start=15&tstart=0

hocus-pocus: 

Give your script application a unique bundle id string (CFBundleIdentifier) and a unique bundle name (CFBundleName) too, to make life easier.  You set those in the info.plist file.  Launch the script app once to register it with launch services, and system will be able to find it thereafter.

Example:
      <key>CFBundleIdentifier</key>
      <string>com.rccharles.b</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>b</string>

    I added the CFBundleIdentifier info above the CFBundleInfoDictionaryVersion line. I left the CFBundleInfoDictionaryVersion and CFBundleName as is.

    *)

property myVar : "initial value"

on run
    display dialog myVar
end run

on stringSet(inputVar)
    set myVar to inputVar
    display dialog "variable myVar is " & myVar
end stringSet
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.