2011-07-01 10 views
10

मुझे यह जानने में मदद की ज़रूरत है कि किसी भी एप्लिकेशन पर सीएमडी + CTRL + D दबाकर चयनित टेक्स्ट के लिए शब्दकोश पॉपअप संवाद कैसे दिखा रहा है। मैं अपने कोको ऐप के लिए समान कार्यक्षमता को कार्यान्वित करना चाहता हूं, जहां मेरा ऐप पृष्ठभूमि में चलाएगा और चयनित टेक्स्ट के लिए कुछ गर्म कुंजी प्रेस पर सुझाव दिखाएगा।एक्सेसिबिलिटी एपीआई के माध्यम से वर्तमान में चयनित टेक्स्ट के वैश्विक स्क्रीन निर्देशांक कैसे प्राप्त करें।

Dictionary app hot key suggestion dialog

मैं पहले से ही हॉट की कैप्चरिंग को लागू किया है, मैं सिर्फ स्क्रीन पर चयनित पाठ का आयत क्षेत्र पाने के लिए कोड की आवश्यकता होती है, तो मैं शब्दकोश अनुप्रयोग की तरह संवाद दिखा सकते हैं।

धन्यवाद

+0

आपने अपने ऐप की सीमाओं से पॉपओवर को कैसे दिखाया? –

उत्तर

14

आप इसके लिए एक्सेसिबिलिटी एपीआई का उपयोग कर सकते हैं। सुनिश्चित करें कि "सहायक उपकरणों के लिए पहुंच सक्षम करें" सेटिंग चेक की गई है (सिस्टम प्राथमिकताएं/सार्वभौमिक पहुंच में)।

निम्न कोड स्निपेट अधिकांश अनुप्रयोगों में चयनित पाठ के सीमा (स्क्रीन निर्देशांक में) निर्धारित करेगा। दुर्भाग्यवश, यह मेल और सफारी में काम नहीं करता है, क्योंकि वे निजी अभिगम्यता विशेषताओं का उपयोग करते हैं। यह संभवतः वहां काम करने के लिए भी संभव है, लेकिन इसके लिए अधिक काम और संभवतः निजी एपीआई कॉल की आवश्यकता है।

AXUIElementRef systemWideElement = AXUIElementCreateSystemWide(); 
AXUIElementRef focussedElement = NULL; 
AXError error = AXUIElementCopyAttributeValue(systemWideElement, kAXFocusedUIElementAttribute, (CFTypeRef *)&focussedElement); 
if (error != kAXErrorSuccess) { 
    NSLog(@"Could not get focussed element"); 
} else { 
    AXValueRef selectedRangeValue = NULL; 
    AXError getSelectedRangeError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextRangeAttribute, (CFTypeRef *)&selectedRangeValue); 
    if (getSelectedRangeError == kAXErrorSuccess) { 
     CFRange selectedRange; 
     AXValueGetValue(selectedRangeValue, kAXValueCFRangeType, &selectedRange); 
     AXValueRef selectionBoundsValue = NULL; 
     AXError getSelectionBoundsError = AXUIElementCopyParameterizedAttributeValue(focussedElement, kAXBoundsForRangeParameterizedAttribute, selectedRangeValue, (CFTypeRef *)&selectionBoundsValue); 
     CFRelease(selectedRangeValue); 
     if (getSelectionBoundsError == kAXErrorSuccess) { 
      CGRect selectionBounds; 
      AXValueGetValue(selectionBoundsValue, kAXValueCGRectType, &selectionBounds); 
      NSLog(@"Selection bounds: %@", NSStringFromRect(NSRectFromCGRect(selectionBounds))); 
     } else { 
      NSLog(@"Could not get bounds for selected range"); 
     } 
     if (selectionBoundsValue != NULL) CFRelease(selectionBoundsValue); 
    } else { 
     NSLog(@"Could not get selected range"); 
    } 
} 
if (focussedElement != NULL) CFRelease(focussedElement); 
CFRelease(systemWideElement); 
+0

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

+0

निर्देशांक लंबवत फ़्लिप किए गए हैं। अपने पैनल के लिए फ्रेम प्राप्त करने के लिए, आपको वाई-समन्वय को इस प्रकार परिवर्तित करना होगा: 'selectBounds.origin.y = [[NSScreen mainScreen] फ्रेम] .size.height - selectBounds.origin.y - selectBounds.size। ऊंचाई '(थोड़ा सा सरलीकृत, मानता है कि आपके पास केवल एक स्क्रीन है)। – omz

+0

बिल्कुल सही। मेरी मदद करने के लिए फिर से धन्यवाद। मैं सोच रहा हूं कि अगर मैं चयन बिंदु की तरह सम्मिलन बिंदु स्थिति प्राप्त करने के लिए एक ही कोड का उपयोग कर सकता हूं। – AmitSri

0

क्या आप देख रहे हैं एक सेवा है। सेवाओं के साथ, आपके ऐप को ग्लोबल हॉटकी को चलाने या कैप्चर करने की भी आवश्यकता नहीं है।

उदाहरण के लिए, आपके द्वारा वर्णित शब्दकोश ऐप की कार्यक्षमता वास्तव में एक सेवा है, सेवाओं मेनू में देखने योग्य है।

Dictionary Service Menu

एप्पल के Service Implementation Guide शायद वहाँ सेवाओं पर सबसे अच्छा जानकारी है।

+0

आपके उत्तर के लिए धन्यवाद। मैं सेवाओं के बारे में जानता हूं और पाठ चयन को पकड़ने के लिए पहले से ही अपने ऐप में उपयोग किया जाता हूं। लेकिन स्क्रीन पर चयनित/हाइलाइट किए गए शब्दकोश ऐप जैसे पॉपअप संवाद को दिखाने की आवश्यकता है, जैसे कि मेरी पोस्ट में डिक्शनरी ऐप दिख रहा है। कृपया मुझे बताएं कि क्या मुझे सेवा प्रतिनिधि में स्क्रीन के सापेक्ष चयन क्षेत्र मिलता है? धन्यवाद – AmitSri

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

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