2013-07-09 73 views
1

我有一個C#應用程序,可以正確響應全局熱鍵。如果全局熱鍵被按下,我想從另一個具有焦點的應用程序獲取選定的文本。從另一個應用程序獲取選定的文本到自己的C#應用​​程序

我測試了原生Win32 Api,然後SendKeysCTRL + C,剪貼板,...)和現在的Microsoft UI自動化!問題是,這隻適用於記事本,但不適用於Internet Explorer或Word或其他應用程序。

我認爲必須有比我有的代碼更好的解決方案。我讀到發送CTRL + C應該可以正常工作,但只能在記事本中使用。

這是我打電話的時候,全局熱鍵被觸發的方法:

public String GetSelectedTextFromApp() 
    { 
     String output = ""; 
     AutomationElement focused = AutomationElement.FocusedElement; 
     object pattern; 
     TextPatternRange[] trs; 
     if (focused.TryGetCurrentPattern(TextPattern.Pattern, out pattern)) 
     { 
      TextPattern tp = (TextPattern)pattern; 
      trs = tp.GetSelection(); 
      output = trs[0].GetText(-1); 
     } 
     return output; 
    } 
+0

檢查您想要從* MS Word *和* IE *中複製選擇的控件類型 - 可能發生那些* UI Automation *不支持的*非標準*控件。 –

回答

0

你想自動化控制可能無法實現TextPattern。它可能只能實現ValuePattern。另外,您關注的控件可能不是實際包含文本的控件,而是一個包裝控件,您可以在其中找到實現上述模式的AutomationElement。 Andrii說,另一種可能性是,該控件根本不支持UIA(儘管我發現很難相信MS Word)。

在這種情況下,值得使用UISpy.exe,它將幫助您看到您嘗試自動化的應用程序的可視化樹。您還可以看到每個AutomationElement支持的Pattern。您也可以撥打GetSupportedPatterns(),每AutomationElement,看看哪個Pattern目前支持。

相關問題