2011-11-03 11 views
18

मेरे पास यह ऐप है जहां मुझे अपने ऐप के भीतर से किसी अन्य ऐप के मेन्यू आइटम (जैसे प्रिंट cmd + p) को सक्रिय करने की आवश्यकता है। अभी मैं नौकरी करने के लिए CGEventPostToPSN() का उपयोग कर रहा हूं और यह ठीक काम करता है, लेकिन जब मैं सैंडबॉक्सिंग सक्रिय करता हूं, तो यह काम करना बंद कर देता है।एक अन्य ऐप के मेन्यू आइटम को सैंडबॉक्स किए गए वातावरण में सक्रिय करने के लिए CGEventPostToPSN() के लिए विकल्प?

CGEventPostToPSN(&psn, keyDownEvent); 
CFRelease(keyDownEvent); 
CGEventPostToPSN(&psn, keyUpEvent); 
CFRelease(keyUpEvent); 

मेरा प्रश्न अब है जब मुझे सैंडबॉक्सिंग सक्षम करने की आवश्यकता होती है तो मैं क्या कर सकता हूं? मैंने एक्सेसिबिलिटी एपीआई के बारे में बहुत कुछ सुना लेकिन मैं यह पता लगाने में असमर्थ था कि मैं एक अन्य ऐप के मेन्यू आइटम को कैसे सक्रिय कर सकता हूं। मैं इस समस्या पर किसी भी उत्तर के लिए आभारी हूं।

फैबियन

+0

जब मैं "स्थिति आइटम" देखा था, मैंने सोचा कि आप 'NSStatusItem' की चर्चा करते हुए थे, लेकिन प्रिंट एक साधारण मेनू आइटम होगा। – JWWalker

+0

धन्यवाद, मैंने इसे सही किया। –

+1

यदि आपको किसी अन्य ऐप से बात करने की ज़रूरत है, तो आपको सैंडबॉक्सिंग सक्षम नहीं करनी चाहिए। मुझे संदेह है कि ऐप्पल कभी भी आपके ऐप को स्वीकृति देगा जिसके लिए उपयोगकर्ता को एक्सेसिबिलिटी एपीआई सक्षम करने की आवश्यकता है ताकि आप ऐप सही ढंग से काम कर सकें। अब आप सबसे अच्छा कर सकते हैं ऐप्पल को एक फीचर अनुरोध दर्ज करना है जहां आप उस समस्या का वर्णन करते हैं जिसे आप हल करने का प्रयास कर रहे हैं। – Kentzo

उत्तर

2

मैं अभी भी इस सवाल का एक अंतिम जवाब की जरूरत नहीं है, लेकिन यह के रूप में @nielsbot ने सुझाव दिया पहुंच-एपीआई के साथ संभव हो रहा है।

AXUIElementPostKeyboardEvent() और AXUIElementPerformAction() जैसे कुछ आशाजनक कार्यों रहे हैं। समस्या: ऐप्पल के सैंडबॉक्स दिशानिर्देश में किसी अन्य ऐप को नियंत्रित करने के लिए एक्सेसिबिलिटी एपीआई का उपयोग करना प्रतिबंधित है।

नोट: ऐप सैंडबॉक्स के साथ, आप इस दस्तावेज़ में वर्णित अनुसार, ऐप को एक्सेसिबिलिटी के लिए सक्षम और सक्षम कर सकते हैं। हालांकि, आप स्क्रीन रीडर जैसे एक सहायक ऐप को सैंडबॉक्स नहीं कर सकते हैं, और आप किसी अन्य ऐप को नियंत्रित करने वाले ऐप को सैंडबॉक्स नहीं कर सकते हैं।

यदि आप इस प्रश्न में आए हैं और मेरे जैसा ही समस्या है, तो मुझे डर है कि आप भाग्य से बाहर हैं। अगर आपको वास्तव में किसी अन्य ऐप को नियंत्रित करना है तो पुनर्विचार करें और यदि ऐसा है, तो हो सकता है कि आप मैक ऐप स्टोर पर अपने ऐप को वितरित नहीं कर पाएंगे।

फैबियन

4

एक sandboxed वातावरण में, आप अभी भी एक और करने के लिए एप्पल घटनाक्रम भेज सकते हैं आवेदन-तुम सिर्फ अपने अनुप्रयोग के लिए एक "एप्पल घटना अस्थायी अपवाद" के लिए आवेदन करना होगा। यह "ऐप्पल इवेंट अस्थायी अपवाद" खंड में ऐप्पल के Element Key Reference में विस्तृत है।
● प्राप्त एप्पल घटनाओं
● एप्पल घटनाओं उसे प्राप्त करने के लिए अपने आप को एप्पल घटनाओं भेजें
● जवाब:

एप्पल घटना अस्थायी अपवाद
जब आप अनुप्रयोग सैंडबॉक्स को अपनाने, अपने अनुप्रयोग करने की क्षमता बरकरार रखती है
हालांकि, ऐप सैंडबॉक्स के साथ आप ऐप्पल ईवेंट को अन्य ऐप्स पर नहीं भेज सकते हैं जब तक आप सेब-इवेंट अस्थायी अपवाद एंटाइटेलमेंट को कॉन्फ़िगर नहीं करते।

आप एप्पल की घटनाओं को भेजने के लिए,,, एप्लिकेशन की बंडल पहचानकर्ता निर्दिष्ट करने के लिए यह पात्रता कुंजी का मान सरणी के लिए एक स्ट्रिंग मान के रूप में लोअरकेस वर्णों में चाहते प्रत्येक ऐप्लिकेशन के लिए। उदाहरण के लिए, ऐप्पल ईवेंट को अपने ऐप से iPhoto में भेजने में सक्षम करने के लिए, स्ट्रिंग मान com.apple.iphoto का उपयोग करें।

पात्रता कुंजी क्षमता
com.apple.security.temporary-exception.apple-events एक या अधिक गंतव्य क्षुधा को एप्पल घटनाओं के भेजने में सक्षम बनाता है।

जहां तक ​​मेरा जानकारी है, एप्पल नहीं स्पष्ट रूप से 'अस्थायी' इस संदर्भ में परिभाषित किया गया है, लेकिन आम सहमति है कि एप्पल अब के लिए लेकिन कुछ भविष्य app की दुकान या मैक ओएस एक्स अद्यतन हो सकता है कि इस अनुमति दे रहे हैं है ऐसा करने की क्षमता को हटा दें।

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

+0

मुझे उस अस्थायी अपवाद के बारे में पता था और यह मेरे ऐप में उपयोग के लिए ठीक होगा। क्या आप जानते हैं कि ऐप्पल घटनाओं का उपयोग करके मैं अन्य ऐप में मेनू आइटम कैसे सक्रिय कर सकता हूं? –

+0

@ फ़ैबियन क्रेज़र, मुझे नहीं लगता कि ऐप्पल ईवेंट का उपयोग करके मेनू आइटम को आमंत्रित करने का कोई सामान्य तरीका है। बेशक, यदि आप प्रेषक ऐप और रिसीवर ऐप दोनों लिख रहे हैं, तो आप अपने इच्छित ऐप्पलवेन्ट प्रोटोकॉल को डिज़ाइन कर सकते हैं। – JWWalker

+1

@ फ़ैबियन क्रेज़र, क्या आपको वाकई मेनू आइटम चलाने की ज़रूरत है? क्या आप 'pdoc' ('kCoreEventClass', 'kAEPrintDocuments') ईवेंट नहीं भेज सकते हैं? –

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

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