Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从.net(C#)中的Webbrowser控件检索所选文本_C#_Winforms_Webbrowser Control - Fatal编程技术网

从.net(C#)中的Webbrowser控件检索所选文本

从.net(C#)中的Webbrowser控件检索所选文本,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我一直在试图找出如何检索用户在我的webbrowser控件中选择的文本,但在浏览了msdn和其他资源后却没有找到任何运气,因此我想知道是否有办法真正做到这一点。也许我只是错过了什么 我感谢任何有关这方面的帮助或资源 谢谢我假设您有一个WinForms应用程序,其中包含一个打开网站的控件 检查是否可以在webbrowser控件中插入/运行JavaScript。使用JavaScript,您将能够找到所选内容并返回它。否则,我怀疑web浏览器控件是否知道其中选择了什么 您需要使用WebBrowser控

我一直在试图找出如何检索用户在我的webbrowser控件中选择的文本,但在浏览了msdn和其他资源后却没有找到任何运气,因此我想知道是否有办法真正做到这一点。也许我只是错过了什么

我感谢任何有关这方面的帮助或资源


谢谢

我假设您有一个WinForms应用程序,其中包含一个打开网站的控件


检查是否可以在webbrowser控件中插入/运行JavaScript。使用JavaScript,您将能够找到所选内容并返回它。否则,我怀疑web浏览器控件是否知道其中选择了什么

您需要使用WebBrowser控件的Document.DomDocument属性,并将其强制转换为Microsoft.mshtml互操作程序集中提供的IHtmlDocument2接口。这使您能够访问完整的DOM,就像在IE中实际运行的Javascript一样

要执行此操作,首先需要将对项目的引用添加到Microsoft.mshtml程序集,通常位于“C:\Program Files\Microsoft.NET\Primary Interop Assemblys\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);
        }
    }
有关从.NET应用程序访问完整DOM的详细信息,请参阅:


如果你只是使用下面的技术

//将所选文本复制到剪贴板

        Clipboard.Clear();
        SendKeys.SendWait("^(c)");
        string strClip = Clipboard.GetText().Trim();
        Clipboard.Clear();
//从剪贴板获取所选文本

        Clipboard.Clear();
        SendKeys.SendWait("^(c)");
        string strClip = Clipboard.GetText().Trim();
        Clipboard.Clear();

以防任何人对不需要添加对mshtml.dll的引用的解决方案感兴趣:

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

哇,控制比我想象的更强大!如果您不介意对IE/mshtml的依赖,那么将web风格的UI添加到桌面应用程序中是一种非常强大且相对简单的方法。双向沟通和活动也很简单,如果有人感兴趣,请告诉我。非常感谢。这正是我想要的。我正在做的项目是使用HTML,这就是我选择web浏览器控件的原因。我只是想不出一种方法来获取选定的文本。还感谢消息来源,他们提供了我刚刚错过的有价值的信息。谢谢你,阿什,你帮我省了好几个小时的噩梦:)@Ash,如果我使用WPF的webBrowser怎么办?WPF的webBrowser没有webBrowser1.Document.domdocument您可以在web浏览器中运行JavaScript,并与C#对话。例如,看到这一点,因为接受的答案包含有用的信息,这是一个更简单的答案,实际上是OP想要的,而无需向项目添加额外的引用。