2014-05-19 42 views
0

我很清楚這個問題已經被要求提供vb.net,但是對於c#沒有任何幫助,我現在一直在爲這個代碼掙扎大約3周,卡住在這一點上。 我需要獲取用戶在應用程序上花費的總時間。到目前爲止,我已經嘗試使用appstart並追加時間跨度,但是我得到00:00:00我知道爲什麼我得到這個結果,但我不知道如何解決我的問題,我在我的智慧結束。所以任何人都可以向我解釋一下如何計算窗口打開的總時間並實時保存所有信息。如何獲得用戶在應用程序上花費的總時間

DateTime appStart = new DateTime(); 
     DateTime appStart = new DateTime(); 
     TimeSpan Duration; 
     DateTime now = DateTime.Now; 
     string time = now.ToString(); 
     const int nChars = 256; 
     int handle = 0; 
     StringBuilder Buff = new StringBuilder(nChars); 
     handle = GetForegroundWindow(); 

     if (GetWindowText(handle, Buff, nChars) > 0) 
     { 
      string strbuff = Buff.ToString(); 
      appstart = DateTime.Now(); 

      #region insert statement 

      try 
      { 
       var with = cnSave; 
       if (with.State == ConnectionState.Open) 
        with.Close(); 
       with.ConnectionString = cnString; 
       with.Open(); 
       string strQRY = "Insert Into [Log] values ('" + strbuff + "', '" + time + "', '" + Processing + "')"; 


       OleDbCommand cmd = new OleDbCommand(strQRY, cnSave); 
       try 
       { 
        cmd.ExecuteNonQuery(); 
       } 
       catch (Exception) 
       { 

       } 

      } 
      finally { } 

      #endregion 
      ActivityTimer.Start(); 
      Processing = "Working"; 
     } 

這不是完整的應用程序也不是什麼樣子,在這是一個不同的PC上的那一刻,我還沒有上傳了還不過這或多或少地概括了什麼應用程序我運行大多數的來自定時器的代碼和好像我說我被卡住了。

我試圖做的邏輯。

  • 最終用戶啓動記事本。
  • 我的應用程序記錄了記事本聚焦的時間或者是活動窗口 -
  • 最終用戶打開或切換到新的應用程序,如Ms Words。
  • 我的應用程序記錄了用戶切換或關閉記事本的時間,並計算這兩個時間之間的差異,並獲得總持續時間並將此信息保存到數據庫中。

等等等等。

+1

這是一個Windows窗體應用程序? –

+1

你能告訴用你爲什麼得到那個結果?你能告訴我們實施嗎? – rae1

+0

你的意思是什麼*獲取用戶在應用程序上花費的總時間*?你的意思是自從用戶啓動應用程序以來已經有多久了?或者是什麼 ? –

回答

2

爲什麼不在用戶啓動應用程序或加載您感興趣的表單時記錄DateTime.Now然後,您可以隨時檢查當前DateTime.Now與記錄的時間之差,看看它們有多長時間已經用過了嗎?這似乎很明顯?我錯過了什麼嗎?

所以......

AppStart的或表格,您有興趣負載等等

Global.TimeStarted = DateTime.Now; 

... 

一些任意時間或者關閉應用程序等...

var usingAppFor = DateTime.Now - Global.TimeStarted; 

我已經使用Global,但在您的架構存儲它的某個地方,它使se NSE。儘管如此,你仍然可以得到一般想法

+0

作爲替代方案,如果需要,Global.TimeStarted可以是一個['StopWatch'](http://www.dotnetperls.com/stopwatch),用於更精確的測量。 – Sinatr

0

爲基地我會使用:

class SubscribedProgram 
{ 
    public DateTime StartTime { get; set; } 
    public TimeSpan TotalTime { get; set; } 
    public object LinkedProgram { get; set; } 

    public SubscribedProgram(object linkedProgram) 
    { 
     this.LinkedProgram = linkedProgram; 
    } 

    public void programActivated() 
    { 
     this.StartTime = DateTime.Now; 
    } 

    public void programDeactivated() 
    { 
     // If this was the first deactivation, set totalTime 
     if (this.TotalTime == TimeSpan.MinValue) { this.TotalTime = DateTime.Now.Subtract(this.StartTime); } 

     // If this is not the first calculation, add older totalTime too 
     else { this.TotalTime = this.TotalTime + (DateTime.Now.Subtract(this.StartTime)); } 
    } 
} 

後來不知怎的,你需要監視的每個隨後節目「激活」和「禁用」 -events。每次觸發某些事件時,您需要閱讀程序,找到鏈接的SubscribedProgram對象,然後運行相應的方法(如programActivated())。

+0

我想得到一個活動窗口的總運行時間,而不是我的程序 –

+0

那麼你想要窗口的總時間是主動?所以,如果用戶檢查另一個窗口,計時器停止?並繼續當窗口再次激活? – W0lfw00ds

+0

是的,但不是窗口的所有窗口 –

相關問題