我希望我能得到一些帮助。 我正在尝试使用C#(以最简单的方式)创建基于主机的应用程序来监视从承载应用程序的计算机访问网页,如果在程序运行时访问此网页,则事件应该会增加。 到目前为止,我已经使用了SHDocVw.ShellWindows(),但只有在访问网页时才能访问网页。 它监视Windows Internet Explorer
我也研究过httplistener,但无济于事。
你有解决方案吗? 如果您需要更多详细信息,请与我们联系
答案 0 :(得分:2)
这可能适用于您的情况,也可能不适用,但我最近必须做一些类似于Intranet网站(跨浏览器,因此它比IE更难)。我的解决方案是设置一个托管WCF服务的客户端应用程序。然后,当用户单击网页上的链接(或引发任何事件,例如$(document).ready
)时,它会向服务器发送一条消息,告知服务器连接到与当前会话关联的IP地址(实际上只是请求上的IP地址)在已知端口上。这个连接是在客户端应用程序上进行的,该应用程序正在侦听该IP地址和端口,以获取有关操作的说明(在我的情况下,它是动态编译请求中的代码并运行它)。
这当然只适用于Intranet网站。一种适用于互联网IE的更通用的方法是创建一个在localhost上进行通信的IE扩展(或者可能是一个Silverlight应用程序)。我从来没有这样做过,所以我不能告诉你它是如何实现的(但原则上似乎是可能的)。
如果您根本无法访问该网站,那么使用SharpPCAP或Fiddler API可能对您有用。
答案 1 :(得分:2)
假设问题是“我想知道本地计算机上的程序何时访问授予网页”:透明的http代理可能是您想要采用的方法。查看Fiddler,看看它是否正是您想要的。
如果您的问题更多“我想知道我的远程服务器上何时命中某个特定页面”:有很多监控工具可以解析Web服务器日志和事件日志,以了解服务器的状态。如果您想自己做某事并控制服务器的代码 - 收集您感兴趣的页面的命中信息,并提供报告此数据的页面。
答案 2 :(得分:2)
经过几个小时的工作后,我找到了一个解决方案,而不是迄今为止最优雅的解决方案(并且有时会导致内存转储),但它可以满足我的需求。 感谢
上次编辑时,我通过添加时间解决了崩溃问题,因此每隔一秒左右检查一次页面。 再次感谢你在我的问题中提出的问题。
class wait
{
private static System.Timers.Timer aTimer;
public void timed1()
{
// Create a timer with a ten second interval.
aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 2 seconds (2000 milliseconds).
aTimer.Interval = 2000;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//NetKeyLogger klog = new NetKeyLogger();
// Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
Kelloggs.Program KKA = new Kelloggs.Program();
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
foreach (SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if (filename.Equals("iexplore"))
{
string ddd = (ie.LocationURL);
// Console.WriteLine(ddd);
if (ie.LocationURL == "http://www.testPage.com/")
{
Console.WriteLine("Page found");
// Console.ReadLine();
aTimer.Enabled = false;
KKA.Maino();
}
}