cocoa - ओएस एक्स में किसी के कार्यक्रम को छूने वाले मिशन कंट्रोल या कमांड-टैब स्विचर का पता कैसे लगा सकता है?




core-graphics (2)

क्या आपने NSRunningApplication करने का प्रयास किया है?

मैं प्रोग्राम में CGAssociateMouseAndMouseCursorPosition (NO) का उपयोग करने की कोशिश कर रहा हूँ यह स्क्रीन को कर्सर से माउस को डिस्कनेक्ट करता है जब आपका एप्लिकेशन "अग्रभूमि में" होता है दुर्भाग्य से यह भी डिस्कनेक्ट करता है जब मिशन कंट्रोल या एप्लिकेशन स्विचर या कौन जानता है कि क्या और क्या आता है।

अब तक मुझे पता है:

  • आवेदन अभी भी सक्रिय है।
  • विंडो अभी भी महत्वपूर्ण है
  • जब ये बातें आती हैं तो डिफ़ॉल्ट अधिसूचना केंद्र पर कुछ भी नहीं भेजा जाता है
  • एप्लिकेशन माउस को चले गए ईवेंट प्राप्त करना बंद कर देता है, लेकिन एक NSEvent addGlobalMonitorForEventsMatchingMask: हैंडलर: उन्हें भी प्राप्त नहीं होता है, जो कम से कम कहने के लिए अजीब है यह मेरे आवेदन पर नहीं वितरित किसी भी घटनाओं को प्राप्त करना चाहिए। (मैं याद कर रही घटनाओं का पता लगाने की योजना बना रहा था कि जब माउस को फिर से जोड़ना होगा।

तो, क्या यह पता लगाने का एक तरीका है कि जब मेरा आवेदन अब नियंत्रण में नहीं है, खासकर क्योंकि मिशन नियंत्रण या स्विच पर कब्जा कर लिया गया है? वे वास्तव में माउस को काम करने की उम्मीद करते हैं और मुझे उनके लिए उस संघ को पुनर्स्थापित करने की आवश्यकता है।


मैं आपको आश्चर्यचकित करता हूं कि एक वैश्विक घटना मॉनिटर घटनाओं को नहीं देख रहा है इसी तरह की स्थिति में, मैंने एक समान प्रयोजन के लिए क्वार्ट्ज इवेंट टैप का इस्तेमाल किया। कोको ग्लोबल इवेंट मॉनिटर इवेंट नल के समान है, इसलिए मुझे लगा कि यह काम करेगा।

मैंने kCGAnnotatedSessionEventTap पर नल डाल दिया और यह परिणाम निर्धारित करने के लिए कि जब घटनाएं किसी अन्य ऐप (उदाहरण के लिए मिशन कंट्रोल या एक्स्पोज़) पर जा रही थी, तो यह निर्धारित करने के लिए CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID) से परिणाम की तुलना में। (मैं टैब को निष्क्रिय करता हूं जब मेरा ऐप सक्रिय स्थिति को त्याग देता है, इसलिए यह केवल एक ऐप के लिए किस्मत में प्राप्त होने वाले घटनाओं को प्राप्त करना चाहिए जब इस प्रकार की ओवरले UI प्रस्तुत की जाती है।)

वैसे, आपने डिफ़ॉल्ट अधिसूचना केंद्र की निगरानी का उल्लेख किया है, लेकिन, अगर मिशन कंट्रोल या पसंद के बारे में कोई सूचना है, तो वितरित अधिसूचना केंद्र ( NSDistributedNotificationCenter सेंटर) पर आने की अधिक संभावना है। इसलिए, यह जांचने लायक है कि