2011-02-10 9 views
5

मैं प्रोग्राम को मैक अप लेना चाहता हूं। मैंने IOPMSchedulePowerEvent का उपयोग करके शुरू किया, हालांकि, उस विधि के लिए व्यवस्थापक पहुंच और विशेषाधिकार प्राप्त सहायक की आवश्यकता है। मैंने कार्यान्वित किया है और यह काम करता है लेकिन रास्ता बहुत जटिल है।मैक पर सिस्टम वरीयताओं का उपयोग करके प्रोग्राम प्रोग्रामिक रूप से शेड्यूल कैसे करें?

मैंने एक बेहतर दृष्टिकोण के लिए चारों ओर देखा है और पाया है कि आप सिस्टम प्राथमिकताएं -> ऊर्जा सेवर -> शेड्यूल पर जाकर जागने के लिए सिस्टम शेड्यूल कर सकते हैं। इस विधि का उपयोग कर जागने के समय प्रोग्रामेटिक रूप से शेड्यूल करने का कोई तरीका है?

धन्यवाद।

संपादित करें: मुझे समझ में आता है कि सिस्टम को शेड्यूल सिस्टम जागने और नींद के समय तक व्यवस्थापक पहुंच की आवश्यकता है। वह ठीक है। मैं इस प्रोग्रामेटिक रूप से करने में सक्षम होना चाहता हूं। उपयोगकर्ता को कार्यक्षमता अधिकृत करने के बाद यह ठीक है कि वे केवल एक बार पूछे जाते हैं। सिस्टम जागने के समय को सेट करने के बाद के अनुरोधों को उपयोगकर्ता प्रमाणीकरण की आवश्यकता नहीं होनी चाहिए।

उत्तर

2

IOPMSchedulePowerEvent का उपयोग करना सही बात है। हालांकि, अगर आप एक विशेषाधिकार प्राप्त सहायक उपकरण बनाते हैं तो आपको केवल उपयोगकर्ता को अपने पासवर्ड के लिए संकेत देने की आवश्यकता होती है। ऐप्पल का BetterAuthorizationSample कोड यह उदाहरण देता है कि यह कैसे करें; एक तृतीय पक्ष संशोधन भी है, AuthorizedTasksInCocoa, जो उपयोग करने में थोड़ा आसान हो सकता है (मैंने इसे आजमाया नहीं है)।

+0

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

+1

यूप, यदि आप मैक ऐप स्टोर में सबमिट करना चाहते हैं तो आप ऐसा नहीं कर सकते हैं। यह डिजाइन द्वारा है और इसके चारों ओर कोई रास्ता नहीं है।ऐप्पल के साथ एक बग फाइल करें यदि यह आपके लिए एक समस्या है और शायद, किसी दिन, वे नियम बदल देंगे। (प्राधिकरण का उपयोग करने वाले अन्य अनुप्रयोगों में मैक ऐप स्टोर के लिए अलग-अलग संस्करण हैं जो प्राधिकरण सुविधा को हटाते हैं।) –

+0

ठीक है, मुझे पता है कि सिस्टम को नींद से उठाना संभव है क्योंकि दुकान में अलार्म घड़ी अनुप्रयोग हैं जो यह करता है (उदा। अरोड़ा)। ऑरोरा एप्लिकेशन को एक व्यवस्थापक प्रमाणीकरण की आवश्यकता होती है और सिस्टम को नींद से जगाने के लिए एक सहायक टूल का उपयोग करता है। मुझे समझ में नहीं आता कि वे लॉन्च डी का उपयोग न करने का तरीका कैसे प्राप्त कर सकते हैं। – David

0

मुझे पूरा यकीन है कि इसका उद्देश्य व्यवस्थापक पहुंच की आवश्यकता है। उदाहरण के लिए, सिस्टम प्राथमिकताएं -> ऊर्जा सेवर -> शेड्यूल में विकल्प अनुपलब्ध हैं जब तक आप व्यवस्थापक के रूप में लॉग इन नहीं होते हैं या सिस्टम प्राथमिकताओं को व्यवस्थापक के रूप में प्रमाणित नहीं करते हैं। अगर आपको किसी विशेष निजी के बिना ऐसा करने का कोई तरीका मिल गया है, तो मैं उम्मीद करता हूं कि ऐप्पल को सुरक्षा बग के रूप में सम्मानित किया जाए, और इसे ठीक करें (इस प्रकार आपके प्रोग्राम को तोड़ना)।

+0

ठीक व्यवस्थापक पहुंच की आवश्यकता है, लेकिन क्या आप प्रोग्राम की नींद को व्यवस्थित रूप से एक्सेस करने और शेड्यूलर उठाने का तरीका जानते हैं? – David

1

मैं तुम्हारे लिए एक पूरा जवाब नहीं है, लेकिन यह बेहद मदद करनी चाहिए: http://www.opensource.apple.com/source/PowerManagement/PowerManagement-211/pmset/pmset.c

आप क्या करना चाहता हूँ एक kIOPMAutoWake अनुसूची है। कोड में निरंतर (इसकी भिन्नता नहीं) ढूंढें और पढ़ना शुरू करें। यह इतना लंबा नहीं है।

आप शायद pmset सीधे भी उपयोग कर सकते हैं, लेकिन यह बहुत ही सुरुचिपूर्ण होगा।

बढ़ने के लिए, ऐप्पल Secure Coding Guide में इसके बारे में बात करता है।

0

आप पावर मैनेजर के माध्यम से IOPMSchedulePowerEvent के साथ जागने की घटनाओं को शेड्यूल कर सकते हैं। आप तुरंत जागने में सक्षम हो सकते हैं। पीएमएससेट पावर मैनेजर के लिए कमांड लाइन रैपर है। आप कुछ मामलों में IOCancelPowerChange के साथ नींद को भी रोक सकते हैं।

आप माउस या कुंजी ईवेंट उत्पन्न करके नींद को रोकने या जागने में सक्षम हो सकते हैं। घटनाओं को उत्पन्न करने का एक तरीका CGPostKeyboardEvent के साथ है।

==> सामान्य नींद क्लैम्सहेल बंद नींद से अलग है। उत्तरार्द्ध को प्रभावित करने के लिए आपको अनिद्रा जैसे कर्नेल एक्सटेंशन को लिखना होगा।

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

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