開放式開發/開源項目-TimeDog[C#WindowsApp]

來源:互聯網
上載者:User

Update@2005.8.19
TimeDog最新版本 v13

http://www2.zzu.edu.cn/xb/timedog.exe
原始碼這裡下載
http://www2.zzu.edu.cn/xb/timedog_src.rar


==============
本人以前做過不少的ASP.NET的web應用程式開發,但是,在傳統型應用程式開發方面不熟悉,基本沒有開發過這方面的軟體,如今,本人想通過共同開發來交流,利用業餘時間使自己具有開發應用軟體的經驗,希望C#初學者,或者已經掌握C# Windows應用程式開發的.net愛好者與我交流.QQ:154222225.

項目初步需求如下:

名稱:TimeDog
實現功能:能夠累計計算電腦從某時刻起,其啟動並執行總體時間.軟體隨作業系統啟動,並開始計時,使用者關閉作業系統時,儲存已耗用時間,以便和下次的已耗用時間進行累加.作業系統運行時期內,不允許使用者結束本軟體進程.

共同開發人員:
#caca(卡卡) http://www.cnblogs.com/caca
#frogman http://www.cnblogs.com/frogman/

開發進度如下:
1,在CSDN發表的求助:http://community.csdn.net/Expert/topic/3797/3797941.xml?temp=.8971979
2,自啟動解決方案:

使程式開機自動運行(修改註冊表?):
將你的程式加入“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”

//自動運行
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey run = hklm.OpenSubKey ( @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run" , true ) ;
        
if(run.GetValue( "LookOut") == null)
{
    string eFileName=Application.ExecutablePath + "      ";//含可執行檔名
    run.SetValue ( "LookOut" , exeFileName ); 
}                
run.Close();
hklm.Close();

3,關於.NET的Hooks
http://www.codeproject.com/csharp/GlobalSystemHook.asp

4,自啟動以及計時功能已經初步實現,考慮到微量資料的儲存,暫時直接儲存到註冊表內部.        private void Form1_Load(object sender, System.EventArgs e)
        {
            //檢測登錄機碼是否已經設定了自動啟動
            RegistryKey LM=Registry.LocalMachine;
            RegistryKey run=LM.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
            if(run.GetValue("TimeDog")==null)
            {
                string exeFileName=Application.StartupPath+@"\TimeDog.exe";
                run.SetValue("TimeDog",exeFileName);
            }

            //設定登錄機碼,用來儲存系統已耗用時間
            if(run.GetValue("TimeDogRunTime")==null)
            {
                run.SetValue("TimeDogRunTime","00:00:00");
            }

            //設定開始時間

            run.SetValue("TimeDogStartTime",DateTime.Now.ToString());

            //系統已耗用時間
            MessageBox.Show("系統運行了:"+run.GetValue("TimeDogRunTime").ToString());
            run.Close();
            LM.Close();
        }

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            //使用者關閉視窗時候,計算程式已耗用時間,並存入註冊表
            RegistryKey LM=Registry.LocalMachine;
            RegistryKey run=LM.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
            TimeSpan LastAll=(TimeSpan)(Convert.ToDateTime(run.GetValue("TimeDogRunTime")).TimeOfDay);//獲得上次總體已耗用時間
            DateTime TimeDogStartTime=Convert.ToDateTime(run.GetValue("TimeDogStartTime").ToString());//獲得本次開始已耗用時間
            TimeSpan ts=DateTime.Now-TimeDogStartTime;//本次已耗用時間
            TimeSpan AllTime=LastAll+ts;//本次在內的總體時間
            if(run.GetValue("TimeDogRunTime")==null)
            {
                run.SetValue("TimeDogRunTime","0");
            }
            else
                run.SetValue("TimeDogRunTime",AllTime.ToString());
        }

5,實作類別似QQ最小化形式的功能,參考了:
C#編寫最小化時隱藏為工作列表徵圖的Window appllication.
6,禁止使用者點擊關閉按鈕時關閉應用程式.private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancle=true;
}

7,項目源檔案提供下載

8,關於Windows服務程式的設計
用Visual C#建立Windows服務程式
用C#建立Windows服務(Windows Services)

9,能建立一個"不死進程"的程式將更好,但是,CSDN的網友說了,無法實現進位使用者結束進程的,於是有人提議用進程注入,這些可能只能用彙編或者C實現了,C#應該不能實現,現在做出了Windows服務程式版本,22K的程式,而且知識在服務啟動,停止的時候作些檔案讀取操作,但是其佔用的記憶體(7.35M)著實不太讓我滿意,程式的最佳化又從何處著手呢?
Windows服務版本提供原始碼下載 (程式的安裝參考上面的兩篇文章)

10,Windows服務版本本來是禁止使用者停止服務的,在使用者關閉電腦的時候觸發一個事件並記錄時間,所以應該重寫OnShutdown()函數,而不是OnStop()函數        protected override void OnShutdown()
        {
            base.OnShutdown ();
            WriteLog("end@"+DateTime.Now.ToString());
            WriteLog("===========");
            //記錄已耗用時間
            WriteTime();
        }

並且專門寫一個TimeDogSee的東西供使用者查看電腦共已耗用時間.

11,放兩個程式的圖片
(:程式以後台服務的形式運行,禁止停止服務)

(:程式的進程圖,20K的程式,佔用記憶體怎麼那麼多呢???C#寫的程式“很吃記憶體”,有沒有最佳化的方法呢?是不是因為後台服務程式調用了很多.net的程式集,雖然代碼就幾行--Microsoft簡化的程式的設計難度。)

(:程式運行一段時間後,佔用記憶體大幅度降低)

(:TimeDogSee,用來查看系統共啟動並執行時間)

12,下面的任務就是做成分布式的應用程式,我們一戶為了計時收費,全部安裝了本軟體,於是想通過網路編程,是使用者可以發送啟動並執行時間以及詳細記錄,伺服器也可以通過網路進行對用戶端的已耗用時間進行控制-比如:清零。

13,關於c#方面的網路編程的書籍,記得上個學期的暑假裡面看過一本書:
C# Network Programming
by Richard Blum  ISBN:0782141765
Sybex 2003 (647 pages)

當時,還編寫了一個控制台下的區域網路聊天程式的,如今,打算再看看了.
裡面涉及到一個網路抓包工具:WinPcap(Ethereal也是調用他實現網路抓包的),可以在這裡下載:
http://netgroup-serv.polito.it/netgroup/tools.html

14,軟體啟動並執行很是成功,不過準備改進一下:
(1)加入定時計算結果,防止以外調電,或者使用者或者系統關閉進程(有記錄).
(2)儲存的資料進行加密,路徑更為隱蔽.
(3)對軟體進行部署,方便安裝,卸載與更新.
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.