Извлечение выбранного текста из элемента управления Webbrowser в .net (C #) - PullRequest
16 голосов
/ 20 октября 2008

Я пытался выяснить, как получить текст, выбранный пользователем в моем элементе управления веб-браузером, и мне не повезло после копания в msdn и других ресурсах, поэтому мне было интересно, есть ли способ сделать это на самом деле , Может быть, я просто что-то пропустил.

Я ценю любую помощь или ресурсы по этому поводу.

Спасибо

Ответы [ 4 ]

44 голосов
/ 20 октября 2008

Необходимо использовать свойство Document.DomDocument элемента управления WebBrowser и привести его к интерфейсу IHtmlDocument2, предоставленному в сборке взаимодействия Microsoft.mshtml. Это дает вам доступ к полной версии DOM, доступной для Javascript, фактически работающего в IE.

Для этого сначала нужно добавить ссылку на ваш проект в сборку Microsoft.mshtml, как правило, по адресу "C: \ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll". Может быть больше одного, убедитесь, что вы выбрали ссылку с этим путем.

Затем, чтобы получить текущий выделенный текст, например:

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);
        }
    }

Для получения дополнительной информации о доступе к полной версии DOM из приложения .NET см .:

2 голосов
/ 20 января 2017

На всякий случай, если кто-то заинтересован в решении, которое не требует добавления ссылки на mshtml.dll:

private string GetSelectedText()
{
    dynamic document = webBrowser.Document.DomDocument;
    dynamic selection = document.selection;
    dynamic text = selection.createRange().text;
    return (string)text;
}
0 голосов
/ 28 декабря 2013

А если использовать только технику, приведенную ниже?

// Копировать выделенный текст в буфер обмена

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

// Получить выделенный текст из буфера обмена

        string strClip = Clipboard.GetText().Trim();
        Clipboard.Clear();
0 голосов
/ 20 октября 2008

Я предполагаю, что у вас есть приложение WinForms, которое включает в себя элемент управления, который открывает веб-сайт.

Проверьте, можете ли вы внедрять / запускать JavaScript внутри своего веб-браузера. Используя JavaScript, вы сможете узнать, что было выбрано, и вернуть его. В противном случае, я сомневаюсь, что у элемента управления веб-браузера есть какие-либо сведения о том, что выделено внутри него.

...