Pergunta

Eu estive tentando descobrir como recuperar o texto selecionado pelo usuário no meu controle webbrowser e não tiveram sorte depois de cavar através do MSDN e outros recursos, Então eu queria saber se existe uma maneira de realmente fazer isso . Talvez eu simplesmente perdi alguma coisa.

Eu aprecio qualquer ajuda ou recursos em relação a este.

Graças

Foi útil?

Solução

Você precisa usar a propriedade Document.DomDocument do controle WebBrowser e lançou este para a interface IHTMLDocument2 fornecido no Microsoft.mshtml interoperabilidade montagem. Isto dá-lhe acesso ao DOM completa como está disponível para Javascript realmente funcionando no IE.

Para fazer isso você primeiro precisa adicionar uma referência ao seu projeto para o Microsoft.mshtml assembly normalmente no "C: \ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll". Pode haver mais de um, certifique-se de escolher a referência com este caminho.

Depois de obter a seleção de texto atual, por exemplo:

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

Para obter mais informações sobre como acessar o DOM completo a partir de uma aplicação .NET, consulte:

Outras dicas

Apenas no caso de alguém está interessado em uma solução que não requer a adição de uma referência a mshtml.dll:

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

E se você só usar o abaixo técnica?

// Copiar o texto selecionado na área de transferência

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

// Obter texto selecionado da área de transferência

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

Eu estou supondo que você tem um aplicativo WinForms que inclui um controle que abre um site.

Verifique se você pode injetar / executar JavaScript dentro do seu controle webbrowser. Usando JavaScript, você seria capaz de descobrir o que foi selecionado e devolvê-lo. Caso contrário, duvido que o controle de navegador tem qualquer conhecimento do que é selecionado dentro dele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top