Recuperar texto selecionado do controle WebBrowser no .net (C #)
-
03-07-2019 - |
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
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.