超級網迷

超級網迷+ 電腦迷+ 音樂迷
個人資料
正文

【更新】支持命令行參數的家長控製輔助小程序

(2013-09-03 19:50:52) 下一個

需要在命令行中指定用戶名,關機/注銷,延時時間,和使用電腦的一個或多個時間段。代碼如下:

using System;
using System.Threading;
using System.Security.Principal;
using System.Diagnostics;
using System.Windows.Forms;

/*  命令行使用舉例:
 *          例1:Helper.exe john -s 30 1000 1100
 *          如果用戶是john,那麽規定的時間段是10:00到11:00可以用電腦;否則30秒後關機;
 *          例2:Helper.exe john -l 25 1000 1100 1300 1400
 *          如果用戶是john,那麽規定的時間段是10:00到11:00,或者13:00到14:00可以用電腦,
 *          否則25秒後用戶注銷(退出)。          
 */

namespace Helper
{
    static class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 5)
                return; //參數的個數不少於5,否則就退出
           
            else
            {
                //第一個參數是要限製的用戶名
                string userName = args[0].ToUpper();

                string CurUserName = WindowsIdentity.GetCurrent().Name; //取得當前用戶名

                if (CurUserName.Split('')[1].ToUpper() == userName) //判斷登錄用戶名
                {
                    int start = 0;
                    int end = 0;
                    bool isBetween = true; //初始化是否超時的變量

                    try
                    {
                        while (isBetween)
                        {
                            bool flag = false; //判斷是否在時間段的標誌

                            //取得當前時間
                            int now = int.Parse(DateTime.Now.ToString("HHmm"));


                            for (int i = 3; i < args.Length; i = i + 2)
                            {
                                //接下來的時間段(開始時間:start,結束時間:end)
                                start = int.Parse(args[i]);
                                end = int.Parse(args[i + 1]);

                                if (start * end != 0 && end > start)
                                {
                                    //start 到 end 可以看電腦:)
                                    flag = flag | (now > start && now < end);
                                }
                                else
                                    flag = true; //如果參數設置無效,則開綠燈:)
                            }

                            if (!flag) //判斷是否在規定的時間段內
                                break;      //不在的話,停止循環, 也就是開紅燈:(
                            else
                                Thread.Sleep(60 * 1000); //每60秒判斷一次
                        }

                        //如果不在時間段內看電腦,延遲args[2]秒後關機或者注銷...
                        string shutdown = args[1] + " -f -t " + int.Parse(args[2]);
                        System.Diagnostics.Process.Start(@"C:/WINDOWS/system32/Shutdown", shutdown);
                    }
                    catch (Exception e)
                    {
                        //MessageBox.Show("exception"); 出現異常,結束程序
                    }

                }
            }
        }
    }
}

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.