在我的Windows应用程序中,我想在“Internet Explorer”,Firefox和任何其他浏览器中检测所选文本。
你知道我应该用什么代码来实现这个目标吗?
这个想法不是在IE中搜索文本,而是在IE中“捕获所选文本”。顺便说一句,不仅是IE,而是任何具有焦点的Windows应用程序 我能想到的一件事是模拟ctrl + c复制所选文本,然后读取剪贴板,但我也不喜欢这个解决方案。
我几乎可以肯定应该有一种方法来使用Windows API获取所选文本,我知道使用EM_GETSELTEXT,WM_GETTEXT,EM_GETSEL可能很有用,但它们不能在IE或任何其他浏览器中工作,这是我的问题。 ...
答案 0 :(得分:1)
这是一个相当高的命令。我认为你可能只有很少的机会通过IE实现这一点,你可以将“外部”浏览器中加载的页面加载到WebBrowser控件中,并获取所选文本。据我所知,以及长期以来一直寻求做类似事情的人的建议,没有适用于C#代码的Firefox自动化模型,而且没有庞大的工作量和风险。
您对该页面有任何控制权吗?您可以考虑注入类似jQuery的东西来使用Ajax调用发布选择,并设置服务器来监听该调用。
答案 1 :(得分:1)
我建议您考虑使用WatiN API来测试网页是否存在特定字符串。 WatiN目前支持IE 6,7和8,并且存在CTP version用于使用Firefox 2.x和3.x进行测试。这个article描述了如何使用WatiN搜索网页中的一段文本,WatiN网站上有文档描述how to call WatiN from your application。
您的代码的初始起点是:
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();
}
}
}
答案 2 :(得分:0)
VB Script是一种实现这一目标的方法,但仅限于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>