2010-11-22 13 views
7

मेरे पास एक छोटा ट्रे एप्लिकेशन है जो सिस्टम-व्यापी हॉटकी पंजीकृत करता है। जब उपयोगकर्ता किसी भी एप्लिकेशन में कहीं भी टेक्स्ट का चयन करता है और इस हॉटकी को दबाता है तो मैं चयनित टेक्स्ट को कैप्चर करने में सक्षम होना चाहता हूं। मैं इस समय इस AutomationElements का उपयोग कर कर रहा हूँ:किसी भी विंडो से चयनित टेक्स्ट कैसे प्राप्त करें (यूआई ऑटोमेशन का उपयोग करके) - सी #

//Using FocusedElement (since the focused element should be the control with the selected text?) 
AutomationElement ae = AutomationElement.FocusedElement;   
AutomationElement txtElement = ae.FindFirst(TreeScope.Subtree,Condition.TrueCondition); 
if(txtElement == null) 
    return; 

TextPattern tp; 

try 
{ 
    tp = txtElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; 
} 
catch(Exception ex) 
{ 
    return; 
} 

TextPatternRange[] trs; 

if (tp.SupportedTextSelection == SupportedTextSelection.None) 
{ 
    return; 
      } 
else 
{ 
    trs = tp.GetSelection(); 
    string selectedText = trs[0].GetText(-1); 
    MessageBox.Show(selectedText); 

} 

यह कुछ ऐप्स (जैसे नोटपैड, दृश्य बक्से स्टूडियो संपादित करें और इस तरह के रूप में), लेकिन सभी (वर्ड, फ़ायर्फ़ॉक्स, क्रोम के रूप में के लिए, और इतने पर के लिए काम करता है।)

कोई भी व्यक्ति किसी भी विचार में चयनित पाठ को पुनः प्राप्त करने में सक्षम होने के बारे में किसी भी विचार के साथ?

+0

नीचे जो कहा गया है उसके बावजूद, याद रखें कि क्लिपबोर्ड केवल आवेदन लागू होता है _pt-c (या जो कुछ भी); क्लिपबोर्ड समाधान नहीं है – smirkingman

उत्तर

7

दुर्भाग्यवश, किसी भी मनमाने ढंग से आवेदन से चयनित पाठ प्राप्त करने का कोई तरीका नहीं है। यूआई ऑटोमेशन काम करता है यदि एप्लिकेशन यूआईए टेक्स्टपटर का समर्थन करता है; दुर्भाग्य से, अधिकांश नहीं करते हैं। मैंने एक ऐसा एप्लीकेशन लिखा जिसने ऐसा करने की कोशिश की, और फॉलबैक का एक गुच्छा था।

मैंने कोशिश की (सुंदर क्रम में ज्यादा):

  1. UIA.TextPattern
  2. इंटरनेट एक्सप्लोरर विशेष (इस आईई 6,7,8,9 के लिए अलग कार्यान्वयन था)
  3. एडोब Reader- विशिष्ट
  4. क्लिपबोर्ड

इस आवेदन पत्र का 80-90% वहाँ बाहर कवर, लेकिन काफी कुछ है कि अभी भी विफल रही थी।

ध्यान दें कि क्लिपबोर्ड को बहाल करने में इसकी समस्याएं हैं; कुछ अनुप्रयोग (कार्यालय, आदि) ने विक्रेता-विशिष्ट जानकारी को क्लिपबोर्ड में रखा है जिसमें आंतरिक डेटा में पॉइंटर्स हो सकते हैं; जब आप क्लिपबोर्ड पर अपनी जानकारी डालते हैं, तो आंतरिक डेटा जारी हो जाता है, और जब आप पुराने डेटा को वापस डालते हैं, तो क्लिपबोर्ड अब डेटा मुक्त करने के लिए इंगित करता है, जिसके परिणामस्वरूप दुर्घटनाएं होती हैं। आप ज्ञात क्लिपबोर्ड प्रारूपों को केवल सहेजकर/पुनर्स्थापित करके कुछ हद तक काम कर सकते हैं, लेकिन फिर, उस ऐप में अजीब व्यवहार के परिणामस्वरूप दुर्घटनाग्रस्त होने के बजाय "गलत" व्यवहार होता है।

+0

एडोब रीडर विशिष्ट कार्यान्वयन कैसे काम करता है? अगर आपके पास कोई विवरण है, मुझे बताएं। –

+0

मुझे आईई में समस्या का सामना करना पड़ रहा है, क्या आप इसके लिए समाधान सुझाएंगे? –

+0

@ChintanPatel यह कई साल पहले था, और मैंने सोर्स कोड खो दिया है, इसलिए मैं मदद नहीं कर सकता। –

1

क्या क्लिपबोर्ड को देखना और अपनी हॉटकी बनाना संभव है: CTRL + C?

आप किसी भी एप्लिकेशन से चयनित टेक्स्ट को पढ़ने में सक्षम नहीं होंगे। उदाहरण के लिए कुछ पीडीएफ फाइलों ने ऐसी सामग्री को सुरक्षित किया है जो प्रतियों को अस्वीकार करता है।

1

UIA प्रौद्योगिकी सभी आवेदनों द्वारा समर्थित नहीं है, तो आप कुछ मामलों में (एफएफ, क्रोम, आदि) MSAA उपयोग करने के लिए कोशिश कर सकते हैं लेकिन आप अभी भी कई समस्याओं का मिल जाएगा। वर्तमान क्लिपबोर्ड टेक्स्ट को सहेजने का सबसे अच्छा तरीका है, के माध्यम से "CTRL + C" कुंजीपटल संदेश भेजें SendMessage WinAPI फ़ंक्शन, क्लिपबोर्ड टेक्स्ट प्राप्त करें, और प्रारंभिक क्लिपबोर्ड टेक्स्ट को पुनर्स्थापित करें क्योंकि रिक ने कहा।

+1

क्लिपबोर्ड कनेक्ट को सहेजने की आवश्यकता होगी, और उसके बाद बाद में वापस डालें। यह हमेशा आसान नहीं है। –

+0

मैंने आपके दृष्टिकोण की कोशिश की लेकिन मैं Office Word से चयनित टेक्स्ट को कैप्चर करने में विफल रहा। :( http://stackoverflow.com/questions/25281314/capture-selected-text-from-any-window-does-not-sucess-with-office-word – Kiradev

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