2010-11-22 2 views
7

시스템 전체 핫키를 등록하는 작은 트레이 응용 프로그램이 있습니다. 사용자가 응용 프로그램에서 텍스트를 선택하고이 단축키를 누르면 선택한 텍스트를 캡처 할 수 있기를 원합니다. 나는 현재이 사용 AutomationElements을하고 있어요 :모든 창에서 선택한 텍스트를 가져 오는 방법 (UI 자동화 사용) - C#

이 (예 : 메모장, 비주얼 스튜디오 편집 상자와 같은)하지만 같은 워드, 파이어 폭스, 크롬과 같은 모든 (대한 등 일부 응용 프로그램 작동
//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

아래에 언급 된 내용에도 불구하고 클립 보드는 응용 프로그램이 Ctrl-C (또는 무엇이든) 구현 한 경우에만 채워진다는 점을 기억하십시오. 클립 보드가 해결책이 아닙니다. – smirkingman

답변

7

불행히도, 임의의 응용 프로그램에서 선택한 텍스트를 가져올 방법이 없습니다. UI 자동화는 인 경우 응용 프로그램이 UIA TextPattern을 지원하면 을 작동합니다. 불행히도, 대부분은하지 않습니다. 이 작업을 시도한 응용 프로그램을 작성하고 많은 실패가있었습니다.

  1. UIA.TextPattern
  2. 인터넷 익스플로러 별 (이것은 IE 6,7,8,9에 대해 서로 다른 구현을했다)
  3. 어도비 Reader- : 나는 (순서대로 꽤 많이)를 시도

특정

  • 클립 보드
  • 이 거기 밖으로 응용 프로그램을 80 ~ 90 %에 덮여,하지만 여전히 실패한 꽤 있었다.

    클립 보드를 복원하는 데는 자체적으로 문제가 있습니다. 일부 응용 프로그램 (Office 등)은 내부 데이터에 대한 포인터를 가질 수있는 공급 업체별 정보를 클립 보드에 넣습니다. 클립 보드에 정보를 입력하면 내부 데이터가 해제되고 이전 데이터를 다시 가져 오면 클립 보드가 해제 된 데이터를 가리키고 충돌로 이어집니다. 알려진 클립 보드 형식을 저장/복원하는 것만으로도이 문제를 해결할 수 있지만 충돌이 발생하는 대신 응용 프로그램이 이상하게 작동하는 이상한 동작이 발생합니다.

    +0

    Adobe Reader의 특정 구현은 어떻게 이루어 졌습니까? 세부 사항이 있으시면 알려주세요. –

    +0

    IE에서 문제가 발생했습니다. 해결책을 제안 하시겠습니까? –

    +0

    @ChintanPatel 이것은 몇 년 전 이었지만 소스 코드가 손실되어 도움이되지 않습니다. –

    1

    클립 보드를보고 바로 가기 키를 만들 수 있습니까? Ctrl + C?

    응용 프로그램에서 선택한 텍스트를 읽을 수 없습니다. 예를 들어 일부 PDF 파일에는 사본을 허용하지 않는 보호 된 컨텐츠가 있습니다.

    1

    UIA 기술은 모든 응용 프로그램에서 지원하지 않습니다, 당신은 (등 FF, 크롬, 등) 경우에 따라서 MSAA를 사용하려고 할 수 있지만 여전히 많은 문제를 얻을 것이다. 가장 좋은 방법은 현재 클립 보드 텍스트를 저장하고 SendMessage WinAPI 함수를 사용하여 "Ctrl + C"키 누르기 메시지를 보내고 클립 보드 텍스트를 가져 와서 초기 클립 보드 텍스트를 복원하는 것입니다.

    +1

    클립 보드 연결을 저장하고 나중에 다시 넣어야합니다. 항상 쉬운 것은 아닙니다. –

    +0

    귀하의 접근 방식을 시도했지만 Office Word에서 선택한 텍스트를 캡처하지 못했습니다. : http://stackoverflow.com/questions/25281314/capture-selected-text-from-any-window-does-not-sucess-with-office-word – Kiradev

    관련 문제