2012-02-29 72 views
3

我希望我能得到一些幫助。 我試圖創建一個基於主機的應用程序使用C#(以最簡單的方式)來監視從承載應用程序的計算機訪問網頁,如果在程序運行時訪問此網頁,事件應該會上升。 到目前爲止,我已經使用了SHDocVw.ShellWindows(),但它只有在網頁已被訪問而不是被訪問時纔有效。 它監視Windows Internet Explorer監控網頁訪問

我也研究過httplistener但無濟於事。

你有什麼解決辦法嗎? 請讓我知道,如果您需要更多的細節

+0

是您想要在客戶端機器上還是在服務器上觸發事件的應用程序? – 2012-02-29 22:02:05

+1

只是爲了澄清,這個應用程序是打算運行在*客戶*端,而不是*服務器*端,對嗎?您希望使用哪種瀏覽器? – 2012-02-29 22:02:19

+0

這是一個LAN或WAN網站嗎? – 2012-02-29 22:02:49

回答

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

       } 
      } 
2

這可能會也可能不適合您的情況,但我不得不做一些類似的Intranet網站(跨瀏覽器,所以這是一個有點難以只用IE ) 最近。我的解決方案是設置託管WCF服務的客戶端應用程序。然後,當用戶點擊網頁上的鏈接(或引發任何事件,如$(document).ready)時,它會向服務器發送一條消息,告訴服務器連接到與當前會話相關聯的IP地址(實際上只是IP請求地址)在已知的端口上。這個連接是在那個IP地址和端口上監聽的客戶端應用程序上進行的,用於指導做什麼(在我的情況下,它是動態編譯請求中的代碼並運行它)。

這當然只適用於Intranet網站。一個更通用的方法可用於互聯網上的IE,是創建一個在本地主機上進行會話的IE擴展(或者一個Silverlight應用程序)。我從來沒有這樣做過,所以我不能告訴你如何或是否真的有可能(但原則上似乎是可能的)。

如果您根本無法訪問網站,那麼可能使用SharpPCAP或Fiddler API將爲您工作。

2

假設問題是「我想知道本地計算機上的某個程序何時訪問給定網頁」:透明http代理可能是您想要採取的方法。查看Fiddler,看看它是否正是你想要的。

如果您的問題更多「我想知道什麼時候在我的遠程服務器上遇到特定頁面」:有很多監控工具可以解析Web服務器日誌和事件日誌以瞭解服務器的狀態。如果您想自己做一些事情並控制服務器的代碼 - 爲您感興趣的頁面收集關鍵信息並提供一些報告此數據的頁面。