2008-10-20 9 views
16

나는 웹 브라우저 컨트롤에서 사용자가 선택한 텍스트를 검색하는 방법을 알아 내려고 노력해 왔으며 msdn 및 기타 리소스를 통해 파기 한 후 운이 없었습니다. 실제로이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 어쩌면 나는 단순히 뭔가를 놓쳤을 것입니다..net (C#)의 Webbrowser 컨트롤에서 선택된 텍스트 가져 오기

감사의 말씀 감사합니다.

감사

답변

43

WebBrowser 컨트롤의 Document.DomDocument 속성을 사용하여이 컨트롤을 Microsoft.mshtml interop 어셈블리에 제공된 IHtmlDocument2 인터페이스로 캐스팅해야합니다. 이렇게하면 실제 IE에서 실행되는 Javascript에서 사용할 수있는 전체 DOM에 액세스 할 수 있습니다.

이렇게하려면 먼저 프로젝트에 대한 참조를 일반적으로 "C : \ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll"에있는 Microsoft.mshtml 어셈블리에 추가해야합니다. 두 개 이상일 수 있습니다.이 경로로 참조를 선택하십시오.

그리고 예를 들어, 현재 텍스트 선택을 얻을 :

using mshtml; 

... 

    IHTMLDocument2 htmlDocument = webBrowser1.Document.DomDocument as IHTMLDocument2; 

    IHTMLSelectionObject currentSelection= htmlDocument.selection; 

    if (currentSelection!=null) 
    { 
     IHTMLTxtRange range= currentSelection.createRange() as IHTMLTxtRange; 

     if (range != null) 
     { 
      MessageBox.Show(range.text); 
     } 
    } 

를 .NET 응용 프로그램에서 전체 DOM에 액세스하는 방법에 대한 자세한 내용은 다음을 참조하십시오

+0

와우, 컨트롤은 내가 생각했던 것보다 강력합니다. ! –

+0

IE/mshtml에 의존하지 않는다면 데스크톱 애플리케이션에 웹 스타일 UI를 추가하는 것은 매우 강력하고 상대적으로 쉬운 방법입니다. 아무도 관심이 있다면 2 방법 통신 및 이벤트도 매우 간단합니다. – Ash

+0

고마워요. 이것은 내가 찾고 있었던 바로 그 것이다. 제가 작업하고있는 프로젝트는 HTML을 사용하고 있기 때문에 웹 브라우저 컨트롤을 선택했습니다. 선택한 텍스트를 가져올 수있는 방법을 찾지 못했습니다. 또한 출처에 감사 드리며, 나는 누락 된 가치있는 정보를 제공했습니다. – Cliff

-1

난 당신이 웹 사이트를 여는 제어를 포함하는 윈폼 응용 프로그램이 있으리라 믿고있어.

웹 브라우저 컨트롤에 JavaScript를 삽입/실행할 수 있는지 확인하십시오. JavaScript를 사용하면 선택한 내용을 찾아서 반환 할 수 있습니다. 그렇지 않으면 웹 브라우저 컨트롤이 내부에서 선택된 항목에 대한 지식을 갖고 있는지 의심 스럽습니다.

+0

JavaScript를 웹 브라우저에서 실행하고 C#으로 되돌아 갈 수 있습니다. 예를 들어, 이것을 참조하십시오 http://stackoverflow.com/questions/305915/winforms-how-do-i-execute-c-application-code-from-inside-webbrowser-control – MarkJ

0

그리고 기술을 사용한다면?

// 복사 선택한 텍스트를 클립 보드에

 Clipboard.Clear(); 
     SendKeys.SendWait("^(c)"); 

// MSHTML에 대한 참조를 추가하는 필요로하지 않는 솔루션에 관심이 단지의 경우 사람에 클립 보드

 string strClip = Clipboard.GetText().Trim(); 
     Clipboard.Clear(); 
1

에서 선택한 텍스트를 가져옵니다 .dll :

private string GetSelectedText() 
{ 
    dynamic document = webBrowser.Document.DomDocument; 
    dynamic selection = document.selection; 
    dynamic text = selection.createRange().text; 
    return (string)text; 
}