4

从我的 Windows 应用程序中,我想检测“Internet Explorer”、Firefox 和任何其他浏览器中的选定文本。

你知道我应该使用哪段代码来实现这一点吗?

这个想法不是在 IE 中搜索文本,而是在 IE 中“捕获选定的文本”。顺便说一句,不仅是 IE,还有任何具有焦点的 Windows 应用程序我能想到的一件事是模拟 ctrl+c 来复制选定的文本,然后读取剪贴板,但我也不喜欢这个解决方案。

我几乎可以肯定应该有一种方法可以使用 Windows API 获取所选文本,我知道使用 EM_GETSELTEXT、WM_GETTEXT、EM_GETSEL 可能有用,但它们在 IE 或任何其他浏览器中不起作用,这是我的问题....

4

3 回答 3

1

这是一个相当高的要求。我认为您可能只有很小的机会通过 IE 实现这一点,您可以将与“外部”浏览器中加载的页面相同的页面加载到WebBrowser控件中,并获取选定的文本。据我所知,并根据长期寻求做类似事情的人的建议,Firefox 没有自动化模型可供 C# 代码访问,而无需付出巨大的努力和风险。

您对页面有任何控制权吗?您可能会考虑注入 jQuery 之类的东西来使用 Ajax 调用发布选择,并设置一个服务器来监听该调用。

于 2010-01-04T15:39:02.397 回答
1

我建议您考虑使用WatiN API 来测试网页是否存在特定字符串。WatiN 目前支持 IE 6、7 和 8,并且存在用于测试 Firefox 2.x 和 3.x的CTP 版本。本文介绍了如何使用 WatiN 在网页中搜索一段文本,并且在 WatiN 站点上有文档描述了如何从您的应用程序中调用 WatiN

您的代码的初始起点是:

using System;
using WatiN.Core;

public static class WatiNExample
{

    public static bool CheckUrlForText(string p_sUrl, string p_sText)
    {
        // Open a new Internet Explorer window and
        // go to the google website.
        IE ie = new IE(p_sUrl);

        try    
        {
            return ie.Text.Contains(p_sText));
        }
        finally
        {
            ie.Close();
        }
    }
}
于 2010-01-04T16:37:30.197 回答
0

VB 脚本是实现这一目标的一种方法,但仅限于 IE 并且只能在剪贴板中复制(所有网页)。然后,您可以粘贴它并在您喜欢的任何应用程序中操作由此检索到的字符串。

Option Explicit <br>
Dim objShell <br>
Set objShell=CreateObject("WScript.Shell") <br>
objShell.Run "iexplore.exe http://www.google.com" ' or whatever page you need to copy from <br>
WScript.Sleep 7000 ' just to wait IE to load the page <br>
objShell.SendKeys "^a" ' selects all <br>
objShell.SendKeys "^c" ' copy into clipboard <br>
于 2010-03-08T15:50:24.600 回答