Question

J'ai essayé de comprendre comment récupérer le texte sélectionné par l'utilisateur dans le contrôle de mon navigateur et je n'ai pas eu de chance après avoir fouillé dans msdn et d'autres ressources. Je me demandais donc s'il existe un moyen de le faire. . Peut-être ai-je simplement manqué quelque chose.

J'apprécie toute aide ou ressource à ce sujet.

Merci

Était-ce utile?

La solution

Vous devez utiliser la propriété Document.DomDocument du contrôle WebBrowser et la convertir en interface IHtmlDocument2 fournie dans l'assembly d'interopérabilité Microsoft.mshtml. Cela vous donne accès à l'intégralité du DOM tel qu'il est disponible sur Javascript en cours d'exécution dans IE.

Pour ce faire, vous devez d'abord ajouter une référence à votre projet à l'assembly Microsoft.mshtml normalement à l'emplacement "C: \ Program Files \ Microsoft.NET \ Assemblys d'interopérabilité primaire \ Microsoft.mshtml.dll". Il peut y en avoir plusieurs, assurez-vous de choisir la référence avec ce chemin.

Ensuite, pour obtenir la sélection de texte actuelle, par exemple:

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

Pour plus d'informations sur l'accès au DOM complet à partir d'une application .NET, voir:

Autres conseils

Juste au cas où quiconque serait intéressé par une solution ne nécessitant pas l'ajout d'une référence à mshtml.dll:

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

Et si vous utilisiez simplement la technique ci-dessous?

// Copier le texte sélectionné dans le presse-papiers

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

// Obtenir le texte sélectionné dans le presse-papiers

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

Je suppose que vous avez une application WinForms qui inclut un contrôle ouvrant un site Web.

Vérifiez si vous pouvez injecter / exécuter du JavaScript dans votre contrôle de navigateur Web. En utilisant JavaScript, vous pourrez trouver ce qui a été sélectionné et le renvoyer. Sinon, je doute que le contrôle du navigateur Web ait une connaissance de ce qui est sélectionné à l'intérieur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top